/* * 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"); } t' action='/cgit.cgi/linux/net-next.git/log/arch/powerpc/platforms/512x/clock-commonclk.c'>
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2016-10-20 15:44:19 +0200
committerTobias Klauser <tklauser@distanz.ch>2017-02-15 10:34:18 +0100
commit5db4992d8f040b8d8db0b86d42806e0c417f7ccf (patch)
tree5b06e952af482d45f3ade64e77824662e34b7fa2 /arch/powerpc/platforms/512x/clock-commonclk.c
parent370ebb0ef6255132373ed35d13e7b1d8d2eb7003 (diff)
usbnet: pegasus: Use net_device_stats from struct net_devicends-private-remove
Instead of using a private copy of struct net_device_stats in struct pegasus, use stats from struct net_device. Also remove the now unnecessary .ndo_get_stats function. Cc: Petko Manolov <petkan@nucleusys.com> Cc: linux-usb@vger.kernel.org Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'arch/powerpc/platforms/512x/clock-commonclk.c')