/* * Copyright 2016, Cyril Bur, IBM Corp. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. * * Sending one self a signal should always get delivered. */ #include #include #include #include #include #include #include #include #include "utils.h" #define MAX_ATTEMPT 500000 #define TIMEOUT 5 extern long signal_self(pid_t pid, int sig); static sig_atomic_t signaled; static sig_atomic_t fail; static void signal_handler(int sig) { if (sig == SIGUSR1) signaled = 1; else fail = 1; } static int test_signal() { int i; struct sigaction act; pid_t ppid = getpid(); pid_t pid; act.sa_handler = signal_handler; act.sa_flags = 0; sigemptyset(&act.sa_mask); if (sigaction(SIGUSR1, &act, NULL) < 0) { perror("sigaction SIGUSR1"); exit(1); } if (sigaction(SIGALRM, &act, NULL) < 0) { perror("sigaction SIGALRM"); exit(1); } /* Don't do this for MAX_ATTEMPT, its simply too long */ for(i = 0; i < 1000; i++) { pid = fork(); if (pid == -1) { perror("fork"); exit(1); } if (pid == 0) { signal_self(ppid, SIGUSR1); exit(1); } else { alarm(0); /* Disable any pending */ alarm(2); while (!signaled && !fail) asm volatile("": : :"memory"); if (!signaled) { fprintf(stderr, "Didn't get signal from child\n"); FAIL_IF(1); /* For the line number */ } /* Otherwise we'll loop too fast and fork() will eventually fail */ waitpid(pid, NULL, 0); } } for (i = 0; i < MAX_ATTEMPT; i++) { long rc; alarm(0); /* Disable any pending */ signaled = 0; alarm(TIMEOUT); rc = signal_self(ppid, SIGUSR1); if (rc) { fprintf(stderr, "(%d) Fail reason: %d rc=0x%lx", i, fail, rc); FAIL_IF(1); /* For the line number */ } while (!signaled && !fail) asm volatile("": : :"memory"); if (!signaled) { fprintf(stderr, "(%d) Fail reason: %d rc=0x%lx", i, fail, rc); FAIL_IF(1); /* For the line number */ } } return 0; } int main(void) { test_harness_set_timeout(300); return test_harness(test_signal, "signal"); } method='get' action='/cgit.cgi/linux/net-next.git/log/drivers/usb/gadget/function/f_hid.c'>
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2017-02-01 12:46:17 -0500
committerDavid S. Miller <davem@davemloft.net>2017-02-01 12:46:17 -0500
commit889711a03e0fba427fb85317900e93c74e3be02a (patch)
tree05af2eda6502a95cf11935cce1e9b25a1340e7ca /drivers/usb/gadget/function/f_hid.c
parentff1176f6164f3d151ee64c05d3f7b6662a81b982 (diff)
parent7243a1af37a4dc9225004546d9d0756c529ad3ce (diff)
Merge tag 'wireless-drivers-next-for-davem-2017-02-01' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next
Kalle Valo says: ==================== wireless-drivers-next patches for 4.11 It's nice to see rt2x00 development has becoming active, for example adding support for a new chip version. Also wcn36xx has been converted to use the recently merged QCOM_SMD subsystem. Otherwise new features and fixes it lots of drivers. Major changes: iwlwifi * some more work in preparation for A000 family support * add support for radiotap timestamps * some work on our firmware debugging capabilities wcn36xx * convert to a proper QCOM_SMD driver (from the platform_driver interface) ath10k * VHT160 support * dump Copy Engine registers during firmware crash * search board file extension from SMBIOS wil6210 * add disable_ap_sme module parameter rt2x00 * support RT3352 with external PA * support for RT3352 with 20MHz crystal * add support for RT5350 WiSoC brcmfmac * add support for BCM43455 sdio device rtl8xxxu * add support for D-Link DWA-131 rev E1, TP-Link TL-WN822N v4 and others ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/usb/gadget/function/f_hid.c')