diff options
Diffstat (limited to 'arch/um/os-Linux/irq.c')
| -rw-r--r-- | arch/um/os-Linux/irq.c | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/arch/um/os-Linux/irq.c b/arch/um/os-Linux/irq.c index e599be423da1..3788d4568d33 100644 --- a/arch/um/os-Linux/irq.c +++ b/arch/um/os-Linux/irq.c | |||
| @@ -29,21 +29,21 @@ int os_waiting_for_events(struct irq_fd *active_fds) | |||
| 29 | int i, n, err; | 29 | int i, n, err; |
| 30 | 30 | ||
| 31 | n = poll(pollfds, pollfds_num, 0); | 31 | n = poll(pollfds, pollfds_num, 0); |
| 32 | if(n < 0){ | 32 | if (n < 0) { |
| 33 | err = -errno; | 33 | err = -errno; |
| 34 | if(errno != EINTR) | 34 | if (errno != EINTR) |
| 35 | printk("sigio_handler: os_waiting_for_events:" | 35 | printk("sigio_handler: os_waiting_for_events:" |
| 36 | " poll returned %d, errno = %d\n", n, errno); | 36 | " poll returned %d, errno = %d\n", n, errno); |
| 37 | return err; | 37 | return err; |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | if(n == 0) | 40 | if (n == 0) |
| 41 | return 0; | 41 | return 0; |
| 42 | 42 | ||
| 43 | irq_fd = active_fds; | 43 | irq_fd = active_fds; |
| 44 | 44 | ||
| 45 | for(i = 0; i < pollfds_num; i++){ | 45 | for (i = 0; i < pollfds_num; i++) { |
| 46 | if(pollfds[i].revents != 0){ | 46 | if (pollfds[i].revents != 0) { |
| 47 | irq_fd->current_events = pollfds[i].revents; | 47 | irq_fd->current_events = pollfds[i].revents; |
| 48 | pollfds[i].fd = -1; | 48 | pollfds[i].fd = -1; |
| 49 | } | 49 | } |
| @@ -54,7 +54,7 @@ int os_waiting_for_events(struct irq_fd *active_fds) | |||
| 54 | 54 | ||
| 55 | int os_isatty(int fd) | 55 | int os_isatty(int fd) |
| 56 | { | 56 | { |
| 57 | return(isatty(fd)); | 57 | return isatty(fd); |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | int os_create_pollfd(int fd, int events, void *tmp_pfd, int size_tmpfds) | 60 | int os_create_pollfd(int fd, int events, void *tmp_pfd, int size_tmpfds) |
| @@ -65,7 +65,7 @@ int os_create_pollfd(int fd, int events, void *tmp_pfd, int size_tmpfds) | |||
| 65 | return((pollfds_size + 1) * sizeof(pollfds[0])); | 65 | return((pollfds_size + 1) * sizeof(pollfds[0])); |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | if(pollfds != NULL){ | 68 | if (pollfds != NULL) { |
| 69 | memcpy(tmp_pfd, pollfds, | 69 | memcpy(tmp_pfd, pollfds, |
| 70 | sizeof(pollfds[0]) * pollfds_size); | 70 | sizeof(pollfds[0]) * pollfds_size); |
| 71 | /* remove old pollfds */ | 71 | /* remove old pollfds */ |
| @@ -73,18 +73,15 @@ int os_create_pollfd(int fd, int events, void *tmp_pfd, int size_tmpfds) | |||
| 73 | } | 73 | } |
| 74 | pollfds = tmp_pfd; | 74 | pollfds = tmp_pfd; |
| 75 | pollfds_size++; | 75 | pollfds_size++; |
| 76 | } else { | 76 | } else |
| 77 | /* remove not used tmp_pfd */ | 77 | kfree(tmp_pfd); /* remove not used tmp_pfd */ |
| 78 | if (tmp_pfd != NULL) | ||
| 79 | kfree(tmp_pfd); | ||
| 80 | } | ||
| 81 | 78 | ||
| 82 | pollfds[pollfds_num] = ((struct pollfd) { .fd = fd, | 79 | pollfds[pollfds_num] = ((struct pollfd) { .fd = fd, |
| 83 | .events = events, | 80 | .events = events, |
| 84 | .revents = 0 }); | 81 | .revents = 0 }); |
| 85 | pollfds_num++; | 82 | pollfds_num++; |
| 86 | 83 | ||
| 87 | return(0); | 84 | return 0; |
| 88 | } | 85 | } |
| 89 | 86 | ||
| 90 | void os_free_irq_by_cb(int (*test)(struct irq_fd *, void *), void *arg, | 87 | void os_free_irq_by_cb(int (*test)(struct irq_fd *, void *), void *arg, |
| @@ -94,11 +91,11 @@ void os_free_irq_by_cb(int (*test)(struct irq_fd *, void *), void *arg, | |||
| 94 | int i = 0; | 91 | int i = 0; |
| 95 | 92 | ||
| 96 | prev = &active_fds; | 93 | prev = &active_fds; |
| 97 | while(*prev != NULL){ | 94 | while (*prev != NULL) { |
| 98 | if((*test)(*prev, arg)){ | 95 | if ((*test)(*prev, arg)) { |
| 99 | struct irq_fd *old_fd = *prev; | 96 | struct irq_fd *old_fd = *prev; |
| 100 | if((pollfds[i].fd != -1) && | 97 | if ((pollfds[i].fd != -1) && |
| 101 | (pollfds[i].fd != (*prev)->fd)){ | 98 | (pollfds[i].fd != (*prev)->fd)) { |
| 102 | printk("os_free_irq_by_cb - mismatch between " | 99 | printk("os_free_irq_by_cb - mismatch between " |
| 103 | "active_fds and pollfds, fd %d vs %d\n", | 100 | "active_fds and pollfds, fd %d vs %d\n", |
| 104 | (*prev)->fd, pollfds[i].fd); | 101 | (*prev)->fd, pollfds[i].fd); |
| @@ -110,7 +107,6 @@ void os_free_irq_by_cb(int (*test)(struct irq_fd *, void *), void *arg, | |||
| 110 | /* This moves the *whole* array after pollfds[i] | 107 | /* This moves the *whole* array after pollfds[i] |
| 111 | * (though it doesn't spot as such)! | 108 | * (though it doesn't spot as such)! |
| 112 | */ | 109 | */ |
| 113 | |||
| 114 | memmove(&pollfds[i], &pollfds[i + 1], | 110 | memmove(&pollfds[i], &pollfds[i + 1], |
| 115 | (pollfds_num - i) * sizeof(pollfds[0])); | 111 | (pollfds_num - i) * sizeof(pollfds[0])); |
| 116 | if(*last_irq_ptr2 == &old_fd->next) | 112 | if(*last_irq_ptr2 == &old_fd->next) |
| @@ -129,10 +125,9 @@ void os_free_irq_by_cb(int (*test)(struct irq_fd *, void *), void *arg, | |||
| 129 | return; | 125 | return; |
| 130 | } | 126 | } |
| 131 | 127 | ||
| 132 | |||
| 133 | int os_get_pollfd(int i) | 128 | int os_get_pollfd(int i) |
| 134 | { | 129 | { |
| 135 | return(pollfds[i].fd); | 130 | return pollfds[i].fd; |
| 136 | } | 131 | } |
| 137 | 132 | ||
| 138 | void os_set_pollfd(int i, int fd) | 133 | void os_set_pollfd(int i, int fd) |
| @@ -151,8 +146,10 @@ void init_irq_signals(int on_sigstack) | |||
| 151 | int flags; | 146 | int flags; |
| 152 | 147 | ||
| 153 | flags = on_sigstack ? SA_ONSTACK : 0; | 148 | flags = on_sigstack ? SA_ONSTACK : 0; |
| 154 | if(timer_irq_inited) h = (__sighandler_t) alarm_handler; | 149 | if (timer_irq_inited) |
| 155 | else h = boot_timer_handler; | 150 | h = (__sighandler_t)alarm_handler; |
| 151 | else | ||
| 152 | h = boot_timer_handler; | ||
| 156 | 153 | ||
| 157 | set_handler(SIGVTALRM, h, flags | SA_RESTART, | 154 | set_handler(SIGVTALRM, h, flags | SA_RESTART, |
| 158 | SIGUSR1, SIGIO, SIGWINCH, SIGALRM, -1); | 155 | SIGUSR1, SIGIO, SIGWINCH, SIGALRM, -1); |
