irq.c (a5ab7c8467f1934236e33d5fa1c3c6de831a6648) irq.c (68f5d3f3b6543266b29e047cfaf9842333019b4c)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2017 - Cambridge Greys Ltd
4 * Copyright (C) 2011 - 2014 Cisco Systems Inc
5 * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
6 * Derived (i.e. mostly copied) from arch/i386/kernel/irq.c:
7 * Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar
8 */

--- 42 unchanged lines hidden (view full) ---

51 int fd;
52 struct irq_reg reg[NUM_IRQ_TYPES];
53 bool suspended;
54 bool sigio_workaround;
55};
56
57static DEFINE_SPINLOCK(irq_lock);
58static LIST_HEAD(active_fds);
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2017 - Cambridge Greys Ltd
4 * Copyright (C) 2011 - 2014 Cisco Systems Inc
5 * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
6 * Derived (i.e. mostly copied) from arch/i386/kernel/irq.c:
7 * Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar
8 */

--- 42 unchanged lines hidden (view full) ---

51 int fd;
52 struct irq_reg reg[NUM_IRQ_TYPES];
53 bool suspended;
54 bool sigio_workaround;
55};
56
57static DEFINE_SPINLOCK(irq_lock);
58static LIST_HEAD(active_fds);
59static DECLARE_BITMAP(irqs_allocated, NR_IRQS);
59static DECLARE_BITMAP(irqs_allocated, UM_LAST_SIGNAL_IRQ);
60static bool irqs_suspended;
61
62static void irq_io_loop(struct irq_reg *irq, struct uml_pt_regs *regs)
63{
64/*
65 * irq->active guards against reentry
66 * irq->pending accumulates pending requests
67 * if pending is raised the irq_handler is re-run

--- 346 unchanged lines hidden (view full) ---

414 generic_handle_irq(irq);
415 irq_exit();
416 set_irq_regs(old_regs);
417 return 1;
418}
419
420void um_free_irq(int irq, void *dev)
421{
60static bool irqs_suspended;
61
62static void irq_io_loop(struct irq_reg *irq, struct uml_pt_regs *regs)
63{
64/*
65 * irq->active guards against reentry
66 * irq->pending accumulates pending requests
67 * if pending is raised the irq_handler is re-run

--- 346 unchanged lines hidden (view full) ---

414 generic_handle_irq(irq);
415 irq_exit();
416 set_irq_regs(old_regs);
417 return 1;
418}
419
420void um_free_irq(int irq, void *dev)
421{
422 if (WARN(irq < 0 || irq > NR_IRQS, "freeing invalid irq %d", irq))
422 if (WARN(irq < 0 || irq > UM_LAST_SIGNAL_IRQ,
423 "freeing invalid irq %d", irq))
423 return;
424
425 free_irq_by_irq_and_dev(irq, dev);
426 free_irq(irq, dev);
427 clear_bit(irq, irqs_allocated);
428}
429EXPORT_SYMBOL(um_free_irq);
430

--- 212 unchanged lines hidden (view full) ---

643};
644
645void __init init_IRQ(void)
646{
647 int i;
648
649 irq_set_chip_and_handler(TIMER_IRQ, &alarm_irq_type, handle_edge_irq);
650
424 return;
425
426 free_irq_by_irq_and_dev(irq, dev);
427 free_irq(irq, dev);
428 clear_bit(irq, irqs_allocated);
429}
430EXPORT_SYMBOL(um_free_irq);
431

--- 212 unchanged lines hidden (view full) ---

644};
645
646void __init init_IRQ(void)
647{
648 int i;
649
650 irq_set_chip_and_handler(TIMER_IRQ, &alarm_irq_type, handle_edge_irq);
651
651 for (i = 1; i < NR_IRQS; i++)
652 for (i = 1; i < UM_LAST_SIGNAL_IRQ; i++)
652 irq_set_chip_and_handler(i, &normal_irq_type, handle_edge_irq);
653 /* Initialize EPOLL Loop */
654 os_setup_epoll();
655}
656
657/*
658 * IRQ stack entry and exit:
659 *

--- 108 unchanged lines hidden ---
653 irq_set_chip_and_handler(i, &normal_irq_type, handle_edge_irq);
654 /* Initialize EPOLL Loop */
655 os_setup_epoll();
656}
657
658/*
659 * IRQ stack entry and exit:
660 *

--- 108 unchanged lines hidden ---