Merge tag 'omap-for-v5.1/fixes-rc6' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / arch / um / kernel / irq.c
1 /*
2  * Copyright (C) 2017 - Cambridge Greys Ltd
3  * Copyright (C) 2011 - 2014 Cisco Systems Inc
4  * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
5  * Licensed under the GPL
6  * Derived (i.e. mostly copied) from arch/i386/kernel/irq.c:
7  *      Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar
8  */
9
10 #include <linux/cpumask.h>
11 #include <linux/hardirq.h>
12 #include <linux/interrupt.h>
13 #include <linux/kernel_stat.h>
14 #include <linux/module.h>
15 #include <linux/sched.h>
16 #include <linux/seq_file.h>
17 #include <linux/slab.h>
18 #include <as-layout.h>
19 #include <kern_util.h>
20 #include <os.h>
21 #include <irq_user.h>
22
23
24 /* When epoll triggers we do not know why it did so
25  * we can also have different IRQs for read and write.
26  * This is why we keep a small irq_fd array for each fd -
27  * one entry per IRQ type
28  */
29
30 struct irq_entry {
31         struct irq_entry *next;
32         int fd;
33         struct irq_fd *irq_array[MAX_IRQ_TYPE + 1];
34 };
35
36 static struct irq_entry *active_fds;
37
38 static DEFINE_SPINLOCK(irq_lock);
39
40 static void irq_io_loop(struct irq_fd *irq, struct uml_pt_regs *regs)
41 {
42 /*
43  * irq->active guards against reentry
44  * irq->pending accumulates pending requests
45  * if pending is raised the irq_handler is re-run
46  * until pending is cleared
47  */
48         if (irq->active) {
49                 irq->active = false;
50                 do {
51                         irq->pending = false;
52                         do_IRQ(irq->irq, regs);
53                 } while (irq->pending && (!irq->purge));
54                 if (!irq->purge)
55                         irq->active = true;
56         } else {
57                 irq->pending = true;
58         }
59 }
60
61 void sigio_handler(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs)
62 {
63         struct irq_entry *irq_entry;
64         struct irq_fd *irq;
65
66         int n, i, j;
67
68         while (1) {
69                 /* This is now lockless - epoll keeps back-referencesto the irqs
70                  * which have trigger it so there is no need to walk the irq
71                  * list and lock it every time. We avoid locking by turning off
72                  * IO for a specific fd by executing os_del_epoll_fd(fd) before
73                  * we do any changes to the actual data structures
74                  */
75                 n = os_waiting_for_events_epoll();
76
77                 if (n <= 0) {
78                         if (n == -EINTR)
79                                 continue;
80                         else
81                                 break;
82                 }
83
84                 for (i = 0; i < n ; i++) {
85                         /* Epoll back reference is the entry with 3 irq_fd
86                          * leaves - one for each irq type.
87                          */
88                         irq_entry = (struct irq_entry *)
89                                 os_epoll_get_data_pointer(i);
90                         for (j = 0; j < MAX_IRQ_TYPE ; j++) {
91                                 irq = irq_entry->irq_array[j];
92                                 if (irq == NULL)
93                                         continue;
94                                 if (os_epoll_triggered(i, irq->events) > 0)
95                                         irq_io_loop(irq, regs);
96                                 if (irq->purge) {
97                                         irq_entry->irq_array[j] = NULL;
98                                         kfree(irq);
99                                 }
100                         }
101                 }
102         }
103 }
104
105 static int assign_epoll_events_to_irq(struct irq_entry *irq_entry)
106 {
107         int i;
108         int events = 0;
109         struct irq_fd *irq;
110
111         for (i = 0; i < MAX_IRQ_TYPE ; i++) {
112                 irq = irq_entry->irq_array[i];
113                 if (irq != NULL)
114                         events = irq->events | events;
115         }
116         if (events > 0) {
117         /* os_add_epoll will call os_mod_epoll if this already exists */
118                 return os_add_epoll_fd(events, irq_entry->fd, irq_entry);
119         }
120         /* No events - delete */
121         return os_del_epoll_fd(irq_entry->fd);
122 }
123
124
125
126 static int activate_fd(int irq, int fd, int type, void *dev_id)
127 {
128         struct irq_fd *new_fd;
129         struct irq_entry *irq_entry;
130         int i, err, events;
131         unsigned long flags;
132
133         err = os_set_fd_async(fd);
134         if (err < 0)
135                 goto out;
136
137         spin_lock_irqsave(&irq_lock, flags);
138
139         /* Check if we have an entry for this fd */
140
141         err = -EBUSY;
142         for (irq_entry = active_fds;
143                 irq_entry != NULL; irq_entry = irq_entry->next) {
144                 if (irq_entry->fd == fd)
145                         break;
146         }
147
148         if (irq_entry == NULL) {
149                 /* This needs to be atomic as it may be called from an
150                  * IRQ context.
151                  */
152                 irq_entry = kmalloc(sizeof(struct irq_entry), GFP_ATOMIC);
153                 if (irq_entry == NULL) {
154                         printk(KERN_ERR
155                                 "Failed to allocate new IRQ entry\n");
156                         goto out_unlock;
157                 }
158                 irq_entry->fd = fd;
159                 for (i = 0; i < MAX_IRQ_TYPE; i++)
160                         irq_entry->irq_array[i] = NULL;
161                 irq_entry->next = active_fds;
162                 active_fds = irq_entry;
163         }
164
165         /* Check if we are trying to re-register an interrupt for a
166          * particular fd
167          */
168
169         if (irq_entry->irq_array[type] != NULL) {
170                 printk(KERN_ERR
171                         "Trying to reregister IRQ %d FD %d TYPE %d ID %p\n",
172                         irq, fd, type, dev_id
173                 );
174                 goto out_unlock;
175         } else {
176                 /* New entry for this fd */
177
178                 err = -ENOMEM;
179                 new_fd = kmalloc(sizeof(struct irq_fd), GFP_ATOMIC);
180                 if (new_fd == NULL)
181                         goto out_unlock;
182
183                 events = os_event_mask(type);
184
185                 *new_fd = ((struct irq_fd) {
186                         .id             = dev_id,
187                         .irq            = irq,
188                         .type           = type,
189                         .events         = events,
190                         .active         = true,
191                         .pending        = false,
192                         .purge          = false
193                 });
194                 /* Turn off any IO on this fd - allows us to
195                  * avoid locking the IRQ loop
196                  */
197                 os_del_epoll_fd(irq_entry->fd);
198                 irq_entry->irq_array[type] = new_fd;
199         }
200
201         /* Turn back IO on with the correct (new) IO event mask */
202         assign_epoll_events_to_irq(irq_entry);
203         spin_unlock_irqrestore(&irq_lock, flags);
204         maybe_sigio_broken(fd, (type != IRQ_NONE));
205
206         return 0;
207 out_unlock:
208         spin_unlock_irqrestore(&irq_lock, flags);
209 out:
210         return err;
211 }
212
213 /*
214  * Walk the IRQ list and dispose of any unused entries.
215  * Should be done under irq_lock.
216  */
217
218 static void garbage_collect_irq_entries(void)
219 {
220         int i;
221         bool reap;
222         struct irq_entry *walk;
223         struct irq_entry *previous = NULL;
224         struct irq_entry *to_free;
225
226         if (active_fds == NULL)
227                 return;
228         walk = active_fds;
229         while (walk != NULL) {
230                 reap = true;
231                 for (i = 0; i < MAX_IRQ_TYPE ; i++) {
232                         if (walk->irq_array[i] != NULL) {
233                                 reap = false;
234                                 break;
235                         }
236                 }
237                 if (reap) {
238                         if (previous == NULL)
239                                 active_fds = walk->next;
240                         else
241                                 previous->next = walk->next;
242                         to_free = walk;
243                 } else {
244                         to_free = NULL;
245                 }
246                 walk = walk->next;
247                 kfree(to_free);
248         }
249 }
250
251 /*
252  * Walk the IRQ list and get the descriptor for our FD
253  */
254
255 static struct irq_entry *get_irq_entry_by_fd(int fd)
256 {
257         struct irq_entry *walk = active_fds;
258
259         while (walk != NULL) {
260                 if (walk->fd == fd)
261                         return walk;
262                 walk = walk->next;
263         }
264         return NULL;
265 }
266
267
268 /*
269  * Walk the IRQ list and dispose of an entry for a specific
270  * device, fd and number. Note - if sharing an IRQ for read
271  * and writefor the same FD it will be disposed in either case.
272  * If this behaviour is undesirable use different IRQ ids.
273  */
274
275 #define IGNORE_IRQ 1
276 #define IGNORE_DEV (1<<1)
277
278 static void do_free_by_irq_and_dev(
279         struct irq_entry *irq_entry,
280         unsigned int irq,
281         void *dev,
282         int flags
283 )
284 {
285         int i;
286         struct irq_fd *to_free;
287
288         for (i = 0; i < MAX_IRQ_TYPE ; i++) {
289                 if (irq_entry->irq_array[i] != NULL) {
290                         if (
291                         ((flags & IGNORE_IRQ) ||
292                                 (irq_entry->irq_array[i]->irq == irq)) &&
293                         ((flags & IGNORE_DEV) ||
294                                 (irq_entry->irq_array[i]->id == dev))
295                         ) {
296                                 /* Turn off any IO on this fd - allows us to
297                                  * avoid locking the IRQ loop
298                                  */
299                                 os_del_epoll_fd(irq_entry->fd);
300                                 to_free = irq_entry->irq_array[i];
301                                 irq_entry->irq_array[i] = NULL;
302                                 assign_epoll_events_to_irq(irq_entry);
303                                 if (to_free->active)
304                                         to_free->purge = true;
305                                 else
306                                         kfree(to_free);
307                         }
308                 }
309         }
310 }
311
312 void free_irq_by_fd(int fd)
313 {
314         struct irq_entry *to_free;
315         unsigned long flags;
316
317         spin_lock_irqsave(&irq_lock, flags);
318         to_free = get_irq_entry_by_fd(fd);
319         if (to_free != NULL) {
320                 do_free_by_irq_and_dev(
321                         to_free,
322                         -1,
323                         NULL,
324                         IGNORE_IRQ | IGNORE_DEV
325                 );
326         }
327         garbage_collect_irq_entries();
328         spin_unlock_irqrestore(&irq_lock, flags);
329 }
330 EXPORT_SYMBOL(free_irq_by_fd);
331
332 static void free_irq_by_irq_and_dev(unsigned int irq, void *dev)
333 {
334         struct irq_entry *to_free;
335         unsigned long flags;
336
337         spin_lock_irqsave(&irq_lock, flags);
338         to_free = active_fds;
339         while (to_free != NULL) {
340                 do_free_by_irq_and_dev(
341                         to_free,
342                         irq,
343                         dev,
344                         0
345                 );
346                 to_free = to_free->next;
347         }
348         garbage_collect_irq_entries();
349         spin_unlock_irqrestore(&irq_lock, flags);
350 }
351
352
353 void deactivate_fd(int fd, int irqnum)
354 {
355         struct irq_entry *to_free;
356         unsigned long flags;
357
358         os_del_epoll_fd(fd);
359         spin_lock_irqsave(&irq_lock, flags);
360         to_free = get_irq_entry_by_fd(fd);
361         if (to_free != NULL) {
362                 do_free_by_irq_and_dev(
363                         to_free,
364                         irqnum,
365                         NULL,
366                         IGNORE_DEV
367                 );
368         }
369         garbage_collect_irq_entries();
370         spin_unlock_irqrestore(&irq_lock, flags);
371         ignore_sigio_fd(fd);
372 }
373 EXPORT_SYMBOL(deactivate_fd);
374
375 /*
376  * Called just before shutdown in order to provide a clean exec
377  * environment in case the system is rebooting.  No locking because
378  * that would cause a pointless shutdown hang if something hadn't
379  * released the lock.
380  */
381 int deactivate_all_fds(void)
382 {
383         unsigned long flags;
384         struct irq_entry *to_free;
385
386         spin_lock_irqsave(&irq_lock, flags);
387         /* Stop IO. The IRQ loop has no lock so this is our
388          * only way of making sure we are safe to dispose
389          * of all IRQ handlers
390          */
391         os_set_ioignore();
392         to_free = active_fds;
393         while (to_free != NULL) {
394                 do_free_by_irq_and_dev(
395                         to_free,
396                         -1,
397                         NULL,
398                         IGNORE_IRQ | IGNORE_DEV
399                 );
400                 to_free = to_free->next;
401         }
402         garbage_collect_irq_entries();
403         spin_unlock_irqrestore(&irq_lock, flags);
404         os_close_epoll_fd();
405         return 0;
406 }
407
408 /*
409  * do_IRQ handles all normal device IRQs (the special
410  * SMP cross-CPU interrupts have their own specific
411  * handlers).
412  */
413 unsigned int do_IRQ(int irq, struct uml_pt_regs *regs)
414 {
415         struct pt_regs *old_regs = set_irq_regs((struct pt_regs *)regs);
416         irq_enter();
417         generic_handle_irq(irq);
418         irq_exit();
419         set_irq_regs(old_regs);
420         return 1;
421 }
422
423 void um_free_irq(unsigned int irq, void *dev)
424 {
425         free_irq_by_irq_and_dev(irq, dev);
426         free_irq(irq, dev);
427 }
428 EXPORT_SYMBOL(um_free_irq);
429
430 int um_request_irq(unsigned int irq, int fd, int type,
431                    irq_handler_t handler,
432                    unsigned long irqflags, const char * devname,
433                    void *dev_id)
434 {
435         int err;
436
437         if (fd != -1) {
438                 err = activate_fd(irq, fd, type, dev_id);
439                 if (err)
440                         return err;
441         }
442
443         return request_irq(irq, handler, irqflags, devname, dev_id);
444 }
445
446 EXPORT_SYMBOL(um_request_irq);
447
448 /*
449  * irq_chip must define at least enable/disable and ack when
450  * the edge handler is used.
451  */
452 static void dummy(struct irq_data *d)
453 {
454 }
455
456 /* This is used for everything else than the timer. */
457 static struct irq_chip normal_irq_type = {
458         .name = "SIGIO",
459         .irq_disable = dummy,
460         .irq_enable = dummy,
461         .irq_ack = dummy,
462         .irq_mask = dummy,
463         .irq_unmask = dummy,
464 };
465
466 static struct irq_chip SIGVTALRM_irq_type = {
467         .name = "SIGVTALRM",
468         .irq_disable = dummy,
469         .irq_enable = dummy,
470         .irq_ack = dummy,
471         .irq_mask = dummy,
472         .irq_unmask = dummy,
473 };
474
475 void __init init_IRQ(void)
476 {
477         int i;
478
479         irq_set_chip_and_handler(TIMER_IRQ, &SIGVTALRM_irq_type, handle_edge_irq);
480
481
482         for (i = 1; i < LAST_IRQ; i++)
483                 irq_set_chip_and_handler(i, &normal_irq_type, handle_edge_irq);
484         /* Initialize EPOLL Loop */
485         os_setup_epoll();
486 }
487
488 /*
489  * IRQ stack entry and exit:
490  *
491  * Unlike i386, UML doesn't receive IRQs on the normal kernel stack
492  * and switch over to the IRQ stack after some preparation.  We use
493  * sigaltstack to receive signals on a separate stack from the start.
494  * These two functions make sure the rest of the kernel won't be too
495  * upset by being on a different stack.  The IRQ stack has a
496  * thread_info structure at the bottom so that current et al continue
497  * to work.
498  *
499  * to_irq_stack copies the current task's thread_info to the IRQ stack
500  * thread_info and sets the tasks's stack to point to the IRQ stack.
501  *
502  * from_irq_stack copies the thread_info struct back (flags may have
503  * been modified) and resets the task's stack pointer.
504  *
505  * Tricky bits -
506  *
507  * What happens when two signals race each other?  UML doesn't block
508  * signals with sigprocmask, SA_DEFER, or sa_mask, so a second signal
509  * could arrive while a previous one is still setting up the
510  * thread_info.
511  *
512  * There are three cases -
513  *     The first interrupt on the stack - sets up the thread_info and
514  * handles the interrupt
515  *     A nested interrupt interrupting the copying of the thread_info -
516  * can't handle the interrupt, as the stack is in an unknown state
517  *     A nested interrupt not interrupting the copying of the
518  * thread_info - doesn't do any setup, just handles the interrupt
519  *
520  * The first job is to figure out whether we interrupted stack setup.
521  * This is done by xchging the signal mask with thread_info->pending.
522  * If the value that comes back is zero, then there is no setup in
523  * progress, and the interrupt can be handled.  If the value is
524  * non-zero, then there is stack setup in progress.  In order to have
525  * the interrupt handled, we leave our signal in the mask, and it will
526  * be handled by the upper handler after it has set up the stack.
527  *
528  * Next is to figure out whether we are the outer handler or a nested
529  * one.  As part of setting up the stack, thread_info->real_thread is
530  * set to non-NULL (and is reset to NULL on exit).  This is the
531  * nesting indicator.  If it is non-NULL, then the stack is already
532  * set up and the handler can run.
533  */
534
535 static unsigned long pending_mask;
536
537 unsigned long to_irq_stack(unsigned long *mask_out)
538 {
539         struct thread_info *ti;
540         unsigned long mask, old;
541         int nested;
542
543         mask = xchg(&pending_mask, *mask_out);
544         if (mask != 0) {
545                 /*
546                  * If any interrupts come in at this point, we want to
547                  * make sure that their bits aren't lost by our
548                  * putting our bit in.  So, this loop accumulates bits
549                  * until xchg returns the same value that we put in.
550                  * When that happens, there were no new interrupts,
551                  * and pending_mask contains a bit for each interrupt
552                  * that came in.
553                  */
554                 old = *mask_out;
555                 do {
556                         old |= mask;
557                         mask = xchg(&pending_mask, old);
558                 } while (mask != old);
559                 return 1;
560         }
561
562         ti = current_thread_info();
563         nested = (ti->real_thread != NULL);
564         if (!nested) {
565                 struct task_struct *task;
566                 struct thread_info *tti;
567
568                 task = cpu_tasks[ti->cpu].task;
569                 tti = task_thread_info(task);
570
571                 *ti = *tti;
572                 ti->real_thread = tti;
573                 task->stack = ti;
574         }
575
576         mask = xchg(&pending_mask, 0);
577         *mask_out |= mask | nested;
578         return 0;
579 }
580
581 unsigned long from_irq_stack(int nested)
582 {
583         struct thread_info *ti, *to;
584         unsigned long mask;
585
586         ti = current_thread_info();
587
588         pending_mask = 1;
589
590         to = ti->real_thread;
591         current->stack = to;
592         ti->real_thread = NULL;
593         *to = *ti;
594
595         mask = xchg(&pending_mask, 0);
596         return mask & ~1;
597 }
598