#include #include #include #include #include #include #include #include #include #include static int set_immutable(const char *path, int immutable) { unsigned int flags; int fd; int rc; int error; fd = open(path, O_RDONLY); if (fd < 0) return fd; rc = ioctl(fd, FS_IOC_GETFLAGS, &flags); if (rc < 0) { error = errno; close(fd); errno = error; return rc; } if (immutable) flags |= FS_IMMUTABLE_FL; else flags &= ~FS_IMMUTABLE_FL; rc = ioctl(fd, FS_IOC_SETFLAGS, &flags); error = errno; close(fd); errno = error; return rc; } static int get_immutable(const char *path) { unsigned int flags; int fd; int rc; int error; fd = open(path, O_RDONLY); if (fd < 0) return fd; rc = ioctl(fd, FS_IOC_GETFLAGS, &flags); if (rc < 0) { error = errno; close(fd); errno = error; return rc; } close(fd); if (flags & FS_IMMUTABLE_FL) return 1; return 0; } int main(int argc, char **argv) { const char *path; char buf[5]; int fd, rc; if (argc < 2) { fprintf(stderr, "usage: %s \n", argv[0]); return EXIT_FAILURE; } path = argv[1]; /* attributes: EFI_VARIABLE_NON_VOLATILE | * EFI_VARIABLE_BOOTSERVICE_ACCESS | * EFI_VARIABLE_RUNTIME_ACCESS */ *(uint32_t *)buf = 0x7; buf[4] = 0; /* create a test variable */ fd = open(path, O_WRONLY | O_CREAT, 0600); if (fd < 0) { perror("open(O_WRONLY)"); return EXIT_FAILURE; } rc = write(fd, buf, sizeof(buf)); if (rc != sizeof(buf)) { perror("write"); return EXIT_FAILURE; } close(fd); rc = get_immutable(path); if (rc < 0) { perror("ioctl(FS_IOC_GETFLAGS)"); return EXIT_FAILURE; } else if (rc) { rc = set_immutable(path, 0); if (rc < 0) { perror("ioctl(FS_IOC_SETFLAGS)"); return EXIT_FAILURE; } } fd = open(path, O_RDONLY); if (fd < 0) { perror("open"); return EXIT_FAILURE; } if (unlink(path) < 0) { perror("unlink"); return EXIT_FAILURE; } rc = read(fd, buf, sizeof(buf)); if (rc > 0) { fprintf(stderr, "reading from an unlinked variable " "shouldn't be possible\n"); return EXIT_FAILURE; } return EXIT_SUCCESS; } move&id=413d37326700aaf708730b940b04192c36e13ef4'>diff
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2017-02-07 09:59:21 -0800
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2017-02-07 14:31:45 -0800
commit413d37326700aaf708730b940b04192c36e13ef4 (patch)
treeb31f87b933d437d7f1754dfb983f3b33b7296a2e /drivers/usb/Makefile
parent601bbbe0517303c9f8eb3d75e11d64efed1293c9 (diff)
Input: synaptics-rmi4 - select 'SERIO' when needed
With CONFIG_SERIO=m, we get a build error for the rmi4-f03 driver, added in linux-4.10: warning: (HID_RMI) selects RMI4_F03 which has unmet direct dependencies (!UML && INPUT && RMI4_CORE && (SERIO=y || RMI4_CORE=SERIO)) drivers/input/built-in.o: In function `rmi_f03_attention': rmi_f03.c:(.text+0xcfe0): undefined reference to `serio_interrupt' rmi_f03.c:(.text+0xd055): undefined reference to `serio_interrupt' drivers/input/built-in.o: In function `rmi_f03_remove': rmi_f03.c:(.text+0xd115): undefined reference to `serio_unregister_port' drivers/input/built-in.o: In function `rmi_f03_probe': rmi_f03.c:(.text+0xd209): undefined reference to `__serio_register_port' An earlier patch tried to fix this, but missed the HID_RMI driver that does a 'select' on the F03 backend. This adds a hidden Kconfig symbol that enforces 'serio' to be enabled when RMI4-F03 is, which covers all cases. Fixes: d7ddad0acc4a ("Input: synaptics-rmi4 - fix F03 build error when serio is module") Fixes: c5e8848fc98e ("Input: synaptics-rmi4 - add support for F03") Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers/usb/Makefile')