1 /* 2 * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 3 * Licensed under the GPL 4 * Derived (i.e. mostly copied) from arch/i386/kernel/irq.c: 5 * Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar 6 */ 7 8 #include "linux/cpumask.h" 9 #include "linux/hardirq.h" 10 #include "linux/interrupt.h" 11 #include "linux/kernel_stat.h" 12 #include "linux/module.h" 13 #include "linux/sched.h" 14 #include "linux/seq_file.h" 15 #include "linux/slab.h" 16 #include "as-layout.h" 17 #include "kern_util.h" 18 #include "os.h" 19 20 /* 21 * Generic, controller-independent functions: 22 */ 23 24 int show_interrupts(struct seq_file *p, void *v) 25 { 26 int i = *(loff_t *) v, j; 27 struct irqaction * action; 28 unsigned long flags; 29 30 if (i == 0) { 31 seq_printf(p, " "); 32 for_each_online_cpu(j) 33 seq_printf(p, "CPU%d ",j); 34 seq_putc(p, '\n'); 35 } 36 37 if (i < NR_IRQS) { 38 struct irq_desc *desc = irq_to_desc(i); 39 40 raw_spin_lock_irqsave(&desc->lock, flags); 41 action = desc->action; 42 if (!action) 43 goto skip; 44 seq_printf(p, "%3d: ",i); 45 #ifndef CONFIG_SMP 46 seq_printf(p, "%10u ", kstat_irqs(i)); 47 #else 48 for_each_online_cpu(j) 49 seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); 50 #endif 51 seq_printf(p, " %14s", get_irq_desc_chip(desc)->name); 52 seq_printf(p, " %s", action->name); 53 54 for (action=action->next; action; action = action->next) 55 seq_printf(p, ", %s", action->name); 56 57 seq_putc(p, '\n'); 58 skip: 59 raw_spin_unlock_irqrestore(&desc->lock, flags); 60 } else if (i == NR_IRQS) 61 seq_putc(p, '\n'); 62 63 return 0; 64 } 65 66 /* 67 * This list is accessed under irq_lock, except in sigio_handler, 68 * where it is safe from being modified. IRQ handlers won't change it - 69 * if an IRQ source has vanished, it will be freed by free_irqs just 70 * before returning from sigio_handler. That will process a separate 71 * list of irqs to free, with its own locking, coming back here to 72 * remove list elements, taking the irq_lock to do so. 73 */ 74 static struct irq_fd *active_fds = NULL; 75 static struct irq_fd **last_irq_ptr = &active_fds; 76 77 extern void free_irqs(void); 78 79 void sigio_handler(int sig, struct uml_pt_regs *regs) 80 { 81 struct irq_fd *irq_fd; 82 int n; 83 84 if (smp_sigio_handler()) 85 return; 86 87 while (1) { 88 n = os_waiting_for_events(active_fds); 89 if (n <= 0) { 90 if (n == -EINTR) 91 continue; 92 else break; 93 } 94 95 for (irq_fd = active_fds; irq_fd != NULL; 96 irq_fd = irq_fd->next) { 97 if (irq_fd->current_events != 0) { 98 irq_fd->current_events = 0; 99 do_IRQ(irq_fd->irq, regs); 100 } 101 } 102 } 103 104 free_irqs(); 105 } 106 107 static DEFINE_SPINLOCK(irq_lock); 108 109 static int activate_fd(int irq, int fd, int type, void *dev_id) 110 { 111 struct pollfd *tmp_pfd; 112 struct irq_fd *new_fd, *irq_fd; 113 unsigned long flags; 114 int events, err, n; 115 116 err = os_set_fd_async(fd); 117 if (err < 0) 118 goto out; 119 120 err = -ENOMEM; 121 new_fd = kmalloc(sizeof(struct irq_fd), GFP_KERNEL); 122 if (new_fd == NULL) 123 goto out; 124 125 if (type == IRQ_READ) 126 events = UM_POLLIN | UM_POLLPRI; 127 else events = UM_POLLOUT; 128 *new_fd = ((struct irq_fd) { .next = NULL, 129 .id = dev_id, 130 .fd = fd, 131 .type = type, 132 .irq = irq, 133 .events = events, 134 .current_events = 0 } ); 135 136 err = -EBUSY; 137 spin_lock_irqsave(&irq_lock, flags); 138 for (irq_fd = active_fds; irq_fd != NULL; irq_fd = irq_fd->next) { 139 if ((irq_fd->fd == fd) && (irq_fd->type == type)) { 140 printk(KERN_ERR "Registering fd %d twice\n", fd); 141 printk(KERN_ERR "Irqs : %d, %d\n", irq_fd->irq, irq); 142 printk(KERN_ERR "Ids : 0x%p, 0x%p\n", irq_fd->id, 143 dev_id); 144 goto out_unlock; 145 } 146 } 147 148 if (type == IRQ_WRITE) 149 fd = -1; 150 151 tmp_pfd = NULL; 152 n = 0; 153 154 while (1) { 155 n = os_create_pollfd(fd, events, tmp_pfd, n); 156 if (n == 0) 157 break; 158 159 /* 160 * n > 0 161 * It means we couldn't put new pollfd to current pollfds 162 * and tmp_fds is NULL or too small for new pollfds array. 163 * Needed size is equal to n as minimum. 164 * 165 * Here we have to drop the lock in order to call 166 * kmalloc, which might sleep. 167 * If something else came in and changed the pollfds array 168 * so we will not be able to put new pollfd struct to pollfds 169 * then we free the buffer tmp_fds and try again. 170 */ 171 spin_unlock_irqrestore(&irq_lock, flags); 172 kfree(tmp_pfd); 173 174 tmp_pfd = kmalloc(n, GFP_KERNEL); 175 if (tmp_pfd == NULL) 176 goto out_kfree; 177 178 spin_lock_irqsave(&irq_lock, flags); 179 } 180 181 *last_irq_ptr = new_fd; 182 last_irq_ptr = &new_fd->next; 183 184 spin_unlock_irqrestore(&irq_lock, flags); 185 186 /* 187 * This calls activate_fd, so it has to be outside the critical 188 * section. 189 */ 190 maybe_sigio_broken(fd, (type == IRQ_READ)); 191 192 return 0; 193 194 out_unlock: 195 spin_unlock_irqrestore(&irq_lock, flags); 196 out_kfree: 197 kfree(new_fd); 198 out: 199 return err; 200 } 201 202 static void free_irq_by_cb(int (*test)(struct irq_fd *, void *), void *arg) 203 { 204 unsigned long flags; 205 206 spin_lock_irqsave(&irq_lock, flags); 207 os_free_irq_by_cb(test, arg, active_fds, &last_irq_ptr); 208 spin_unlock_irqrestore(&irq_lock, flags); 209 } 210 211 struct irq_and_dev { 212 int irq; 213 void *dev; 214 }; 215 216 static int same_irq_and_dev(struct irq_fd *irq, void *d) 217 { 218 struct irq_and_dev *data = d; 219 220 return ((irq->irq == data->irq) && (irq->id == data->dev)); 221 } 222 223 static void free_irq_by_irq_and_dev(unsigned int irq, void *dev) 224 { 225 struct irq_and_dev data = ((struct irq_and_dev) { .irq = irq, 226 .dev = dev }); 227 228 free_irq_by_cb(same_irq_and_dev, &data); 229 } 230 231 static int same_fd(struct irq_fd *irq, void *fd) 232 { 233 return (irq->fd == *((int *)fd)); 234 } 235 236 void free_irq_by_fd(int fd) 237 { 238 free_irq_by_cb(same_fd, &fd); 239 } 240 241 /* Must be called with irq_lock held */ 242 static struct irq_fd *find_irq_by_fd(int fd, int irqnum, int *index_out) 243 { 244 struct irq_fd *irq; 245 int i = 0; 246 int fdi; 247 248 for (irq = active_fds; irq != NULL; irq = irq->next) { 249 if ((irq->fd == fd) && (irq->irq == irqnum)) 250 break; 251 i++; 252 } 253 if (irq == NULL) { 254 printk(KERN_ERR "find_irq_by_fd doesn't have descriptor %d\n", 255 fd); 256 goto out; 257 } 258 fdi = os_get_pollfd(i); 259 if ((fdi != -1) && (fdi != fd)) { 260 printk(KERN_ERR "find_irq_by_fd - mismatch between active_fds " 261 "and pollfds, fd %d vs %d, need %d\n", irq->fd, 262 fdi, fd); 263 irq = NULL; 264 goto out; 265 } 266 *index_out = i; 267 out: 268 return irq; 269 } 270 271 void reactivate_fd(int fd, int irqnum) 272 { 273 struct irq_fd *irq; 274 unsigned long flags; 275 int i; 276 277 spin_lock_irqsave(&irq_lock, flags); 278 irq = find_irq_by_fd(fd, irqnum, &i); 279 if (irq == NULL) { 280 spin_unlock_irqrestore(&irq_lock, flags); 281 return; 282 } 283 os_set_pollfd(i, irq->fd); 284 spin_unlock_irqrestore(&irq_lock, flags); 285 286 add_sigio_fd(fd); 287 } 288 289 void deactivate_fd(int fd, int irqnum) 290 { 291 struct irq_fd *irq; 292 unsigned long flags; 293 int i; 294 295 spin_lock_irqsave(&irq_lock, flags); 296 irq = find_irq_by_fd(fd, irqnum, &i); 297 if (irq == NULL) { 298 spin_unlock_irqrestore(&irq_lock, flags); 299 return; 300 } 301 302 os_set_pollfd(i, -1); 303 spin_unlock_irqrestore(&irq_lock, flags); 304 305 ignore_sigio_fd(fd); 306 } 307 308 /* 309 * Called just before shutdown in order to provide a clean exec 310 * environment in case the system is rebooting. No locking because 311 * that would cause a pointless shutdown hang if something hadn't 312 * released the lock. 313 */ 314 int deactivate_all_fds(void) 315 { 316 struct irq_fd *irq; 317 int err; 318 319 for (irq = active_fds; irq != NULL; irq = irq->next) { 320 err = os_clear_fd_async(irq->fd); 321 if (err) 322 return err; 323 } 324 /* If there is a signal already queued, after unblocking ignore it */ 325 os_set_ioignore(); 326 327 return 0; 328 } 329 330 /* 331 * do_IRQ handles all normal device IRQs (the special 332 * SMP cross-CPU interrupts have their own specific 333 * handlers). 334 */ 335 unsigned int do_IRQ(int irq, struct uml_pt_regs *regs) 336 { 337 struct pt_regs *old_regs = set_irq_regs((struct pt_regs *)regs); 338 irq_enter(); 339 generic_handle_irq(irq); 340 irq_exit(); 341 set_irq_regs(old_regs); 342 return 1; 343 } 344 345 int um_request_irq(unsigned int irq, int fd, int type, 346 irq_handler_t handler, 347 unsigned long irqflags, const char * devname, 348 void *dev_id) 349 { 350 int err; 351 352 if (fd != -1) { 353 err = activate_fd(irq, fd, type, dev_id); 354 if (err) 355 return err; 356 } 357 358 return request_irq(irq, handler, irqflags, devname, dev_id); 359 } 360 361 EXPORT_SYMBOL(um_request_irq); 362 EXPORT_SYMBOL(reactivate_fd); 363 364 /* 365 * irq_chip must define at least enable/disable and ack when 366 * the edge handler is used. 367 */ 368 static void dummy(struct irq_data *d) 369 { 370 } 371 372 /* This is used for everything else than the timer. */ 373 static struct irq_chip normal_irq_type = { 374 .name = "SIGIO", 375 .release = free_irq_by_irq_and_dev, 376 .irq_disable = dummy, 377 .irq_enable = dummy, 378 .irq_ack = dummy, 379 }; 380 381 static struct irq_chip SIGVTALRM_irq_type = { 382 .name = "SIGVTALRM", 383 .release = free_irq_by_irq_and_dev, 384 .irq_disable = dummy, 385 .irq_enable = dummy, 386 .irq_ack = dummy, 387 }; 388 389 void __init init_IRQ(void) 390 { 391 int i; 392 393 set_irq_chip_and_handler(TIMER_IRQ, &SIGVTALRM_irq_type, handle_edge_irq); 394 395 for (i = 1; i < NR_IRQS; i++) { 396 set_irq_chip_and_handler(i, &normal_irq_type, handle_edge_irq); 397 } 398 } 399 400 /* 401 * IRQ stack entry and exit: 402 * 403 * Unlike i386, UML doesn't receive IRQs on the normal kernel stack 404 * and switch over to the IRQ stack after some preparation. We use 405 * sigaltstack to receive signals on a separate stack from the start. 406 * These two functions make sure the rest of the kernel won't be too 407 * upset by being on a different stack. The IRQ stack has a 408 * thread_info structure at the bottom so that current et al continue 409 * to work. 410 * 411 * to_irq_stack copies the current task's thread_info to the IRQ stack 412 * thread_info and sets the tasks's stack to point to the IRQ stack. 413 * 414 * from_irq_stack copies the thread_info struct back (flags may have 415 * been modified) and resets the task's stack pointer. 416 * 417 * Tricky bits - 418 * 419 * What happens when two signals race each other? UML doesn't block 420 * signals with sigprocmask, SA_DEFER, or sa_mask, so a second signal 421 * could arrive while a previous one is still setting up the 422 * thread_info. 423 * 424 * There are three cases - 425 * The first interrupt on the stack - sets up the thread_info and 426 * handles the interrupt 427 * A nested interrupt interrupting the copying of the thread_info - 428 * can't handle the interrupt, as the stack is in an unknown state 429 * A nested interrupt not interrupting the copying of the 430 * thread_info - doesn't do any setup, just handles the interrupt 431 * 432 * The first job is to figure out whether we interrupted stack setup. 433 * This is done by xchging the signal mask with thread_info->pending. 434 * If the value that comes back is zero, then there is no setup in 435 * progress, and the interrupt can be handled. If the value is 436 * non-zero, then there is stack setup in progress. In order to have 437 * the interrupt handled, we leave our signal in the mask, and it will 438 * be handled by the upper handler after it has set up the stack. 439 * 440 * Next is to figure out whether we are the outer handler or a nested 441 * one. As part of setting up the stack, thread_info->real_thread is 442 * set to non-NULL (and is reset to NULL on exit). This is the 443 * nesting indicator. If it is non-NULL, then the stack is already 444 * set up and the handler can run. 445 */ 446 447 static unsigned long pending_mask; 448 449 unsigned long to_irq_stack(unsigned long *mask_out) 450 { 451 struct thread_info *ti; 452 unsigned long mask, old; 453 int nested; 454 455 mask = xchg(&pending_mask, *mask_out); 456 if (mask != 0) { 457 /* 458 * If any interrupts come in at this point, we want to 459 * make sure that their bits aren't lost by our 460 * putting our bit in. So, this loop accumulates bits 461 * until xchg returns the same value that we put in. 462 * When that happens, there were no new interrupts, 463 * and pending_mask contains a bit for each interrupt 464 * that came in. 465 */ 466 old = *mask_out; 467 do { 468 old |= mask; 469 mask = xchg(&pending_mask, old); 470 } while (mask != old); 471 return 1; 472 } 473 474 ti = current_thread_info(); 475 nested = (ti->real_thread != NULL); 476 if (!nested) { 477 struct task_struct *task; 478 struct thread_info *tti; 479 480 task = cpu_tasks[ti->cpu].task; 481 tti = task_thread_info(task); 482 483 *ti = *tti; 484 ti->real_thread = tti; 485 task->stack = ti; 486 } 487 488 mask = xchg(&pending_mask, 0); 489 *mask_out |= mask | nested; 490 return 0; 491 } 492 493 unsigned long from_irq_stack(int nested) 494 { 495 struct thread_info *ti, *to; 496 unsigned long mask; 497 498 ti = current_thread_info(); 499 500 pending_mask = 1; 501 502 to = ti->real_thread; 503 current->stack = to; 504 ti->real_thread = NULL; 505 *to = *ti; 506 507 mask = xchg(&pending_mask, 0); 508 return mask & ~1; 509 } 510 511