Coverage Report

Created: 2017-10-25 09:10

/root/src/xen/xen/include/xen/irq.h
Line
Count
Source (jump to first uncovered line)
1
#ifndef __XEN_IRQ_H__
2
#define __XEN_IRQ_H__
3
4
#include <xen/cpumask.h>
5
#include <xen/rcupdate.h>
6
#include <xen/spinlock.h>
7
#include <xen/time.h>
8
#include <xen/list.h>
9
#include <asm/regs.h>
10
#include <asm/hardirq.h>
11
12
struct irqaction {
13
    void (*handler)(int, void *, struct cpu_user_regs *);
14
    const char *name;
15
    void *dev_id;
16
    bool_t free_on_release;
17
#ifdef CONFIG_IRQ_HAS_MULTIPLE_ACTION
18
    struct irqaction *next;
19
#endif
20
};
21
22
/*
23
 * IRQ line status.
24
 */
25
420k
#define _IRQ_INPROGRESS         0 /* IRQ handler active - do not enter! */
26
158k
#define _IRQ_DISABLED           1 /* IRQ disabled - do not enter! */
27
316k
#define _IRQ_PENDING            2 /* IRQ pending - replay on enable */
28
140k
#define _IRQ_REPLAY             3 /* IRQ has been replayed but not acked yet */
29
7.60k
#define _IRQ_GUEST              4 /* IRQ is handled by guest OS(es) */
30
299
#define _IRQ_MOVE_PENDING       5 /* IRQ is migrating to another CPUs */
31
#define _IRQ_PER_CPU            6 /* IRQ is per CPU */
32
#define _IRQ_GUEST_EOI_PENDING  7 /* IRQ was disabled, pending a guest EOI */
33
#define _IRQF_SHARED            8 /* IRQ is shared */
34
420k
#define IRQ_INPROGRESS          (1u<<_IRQ_INPROGRESS)
35
158k
#define IRQ_DISABLED            (1u<<_IRQ_DISABLED)
36
316k
#define IRQ_PENDING             (1u<<_IRQ_PENDING)
37
140k
#define IRQ_REPLAY              (1u<<_IRQ_REPLAY)
38
7.60k
#define IRQ_GUEST               (1u<<_IRQ_GUEST)
39
299
#define IRQ_MOVE_PENDING        (1u<<_IRQ_MOVE_PENDING)
40
#define IRQ_PER_CPU             (1u<<_IRQ_PER_CPU)
41
#define IRQ_GUEST_EOI_PENDING   (1u<<_IRQ_GUEST_EOI_PENDING)
42
#define IRQF_SHARED             (1u<<_IRQF_SHARED)
43
44
/* Special IRQ numbers. */
45
#define AUTO_ASSIGN_IRQ         (-1)
46
#define NEVER_ASSIGN_IRQ        (-2)
47
#define FREE_TO_ASSIGN_IRQ      (-3)
48
49
struct irq_desc;
50
51
/*
52
 * Interrupt controller descriptor. This is all we need
53
 * to describe about the low-level hardware. 
54
 */
55
struct hw_interrupt_type {
56
    const char *typename;
57
    unsigned int (*startup)(struct irq_desc *);
58
    void (*shutdown)(struct irq_desc *);
59
    void (*enable)(struct irq_desc *);
60
    void (*disable)(struct irq_desc *);
61
    void (*ack)(struct irq_desc *);
62
#ifdef CONFIG_X86
63
    void (*end)(struct irq_desc *, u8 vector);
64
#else
65
    void (*end)(struct irq_desc *);
66
#endif
67
    void (*set_affinity)(struct irq_desc *, const cpumask_t *);
68
};
69
70
typedef const struct hw_interrupt_type hw_irq_controller;
71
72
#include <asm/irq.h>
73
74
struct msi_desc;
75
/*
76
 * This is the "IRQ descriptor", which contains various information
77
 * about the irq, including what kind of hardware handling it has,
78
 * whether it is disabled etc etc.
79
 *
80
 * Note: on ARMv8 we can use normal bit manipulation functions to access
81
 * the status field because struct irq_desc contains pointers, therefore
82
 * the alignment of the struct is at least 8 bytes and status is the
83
 * first field.
84
 */
85
typedef struct irq_desc {
86
    unsigned int status;        /* IRQ status */
87
    hw_irq_controller *handler;
88
    struct msi_desc   *msi_desc;
89
    struct irqaction *action;   /* IRQ action list */
90
    int irq;
91
    spinlock_t lock;
92
    struct arch_irq_desc arch;
93
    cpumask_var_t affinity;
94
95
    /* irq ratelimit */
96
    s_time_t rl_quantum_start;
97
    unsigned int rl_cnt;
98
    struct list_head rl_link;
99
} __cacheline_aligned irq_desc_t;
100
101
#ifndef irq_to_desc
102
182k
#define irq_to_desc(irq)    (&irq_desc[irq])
103
#endif
104
105
int init_one_irq_desc(struct irq_desc *);
106
int arch_init_one_irq_desc(struct irq_desc *);
107
108
25.6k
#define irq_desc_initialized(desc) ((desc)->handler != NULL)
109
110
extern int setup_irq(unsigned int irq, unsigned int irqflags,
111
                     struct irqaction *);
112
extern void release_irq(unsigned int irq, const void *dev_id);
113
extern int request_irq(unsigned int irq, unsigned int irqflags,
114
               void (*handler)(int, void *, struct cpu_user_regs *),
115
               const char * devname, void *dev_id);
116
117
extern hw_irq_controller no_irq_type;
118
extern void no_action(int cpl, void *dev_id, struct cpu_user_regs *regs);
119
extern unsigned int irq_startup_none(struct irq_desc *);
120
extern void irq_actor_none(struct irq_desc *);
121
#define irq_shutdown_none irq_actor_none
122
#define irq_disable_none irq_actor_none
123
#define irq_enable_none irq_actor_none
124
125
struct domain;
126
struct vcpu;
127
128
struct pirq {
129
    int pirq;
130
    u16 evtchn;
131
    bool_t masked;
132
    struct rcu_head rcu_head;
133
    struct arch_pirq arch;
134
};
135
136
147
#define INVALID_PIRQ (-1)
137
6.27k
#define pirq_info(d, p) ((struct pirq *)radix_tree_lookup(&(d)->pirq_tree, p))
138
139
/* Use this instead of pirq_info() if the structure may need allocating. */
140
extern struct pirq *pirq_get_info(struct domain *, int pirq);
141
142
102
#define pirq_field(d, p, f, def) ({ \
143
102
    const struct pirq *__pi = pirq_info(d, p); \
144
90
    __pi ? __pi->f : def; \
145
102
})
146
0
#define pirq_to_evtchn(d, pirq) pirq_field(d, pirq, evtchn, 0)
147
#define pirq_masked(d, pirq) pirq_field(d, pirq, masked, 0)
148
149
void pirq_cleanup_check(struct pirq *, struct domain *);
150
151
#define pirq_cleanup_check(pirq, d) \
152
0
    ((pirq)->evtchn ? pirq_cleanup_check(pirq, d) : (void)0)
153
154
extern void pirq_guest_eoi(struct pirq *);
155
extern void desc_guest_eoi(struct irq_desc *, struct pirq *);
156
extern int pirq_guest_unmask(struct domain *d);
157
extern int pirq_guest_bind(struct vcpu *, struct pirq *, int will_share);
158
extern void pirq_guest_unbind(struct domain *d, struct pirq *);
159
extern void pirq_set_affinity(struct domain *d, int irq, const cpumask_t *);
160
extern irq_desc_t *domain_spin_lock_irq_desc(
161
    struct domain *d, int irq, unsigned long *pflags);
162
extern irq_desc_t *pirq_spin_lock_irq_desc(
163
    const struct pirq *, unsigned long *pflags);
164
165
static inline void set_native_irq_info(unsigned int irq, const cpumask_t *mask)
166
21
{
167
21
    cpumask_copy(irq_to_desc(irq)->affinity, mask);
168
21
}
Unexecuted instantiation: cpu.c:set_native_irq_info
Unexecuted instantiation: cpupool.c:set_native_irq_info
Unexecuted instantiation: domctl.c:set_native_irq_info
Unexecuted instantiation: domain.c:set_native_irq_info
Unexecuted instantiation: event_2l.c:set_native_irq_info
Unexecuted instantiation: event_channel.c:set_native_irq_info
Unexecuted instantiation: event_fifo.c:set_native_irq_info
Unexecuted instantiation: grant_table.c:set_native_irq_info
Unexecuted instantiation: guestcopy.c:set_native_irq_info
Unexecuted instantiation: irq.c:set_native_irq_info
Unexecuted instantiation: kernel.c:set_native_irq_info
Unexecuted instantiation: keyhandler.c:set_native_irq_info
Unexecuted instantiation: kexec.c:set_native_irq_info
Unexecuted instantiation: kimage.c:set_native_irq_info
Unexecuted instantiation: mem_access.c:set_native_irq_info
Unexecuted instantiation: memory.c:set_native_irq_info
Unexecuted instantiation: monitor.c:set_native_irq_info
Unexecuted instantiation: multicall.c:set_native_irq_info
Unexecuted instantiation: page_alloc.c:set_native_irq_info
Unexecuted instantiation: preempt.c:set_native_irq_info
Unexecuted instantiation: rangeset.c:set_native_irq_info
Unexecuted instantiation: rcupdate.c:set_native_irq_info
Unexecuted instantiation: rwlock.c:set_native_irq_info
Unexecuted instantiation: sched_arinc653.c:set_native_irq_info
Unexecuted instantiation: sched_credit.c:set_native_irq_info
Unexecuted instantiation: sched_credit2.c:set_native_irq_info
Unexecuted instantiation: sched_rt.c:set_native_irq_info
Unexecuted instantiation: sched_null.c:set_native_irq_info
Unexecuted instantiation: schedule.c:set_native_irq_info
Unexecuted instantiation: shutdown.c:set_native_irq_info
Unexecuted instantiation: softirq.c:set_native_irq_info
Unexecuted instantiation: spinlock.c:set_native_irq_info
Unexecuted instantiation: stop_machine.c:set_native_irq_info
Unexecuted instantiation: symbols.c:set_native_irq_info
Unexecuted instantiation: sysctl.c:set_native_irq_info
Unexecuted instantiation: tasklet.c:set_native_irq_info
Unexecuted instantiation: time.c:set_native_irq_info
Unexecuted instantiation: timer.c:set_native_irq_info
Unexecuted instantiation: trace.c:set_native_irq_info
Unexecuted instantiation: vm_event.c:set_native_irq_info
Unexecuted instantiation: vsprintf.c:set_native_irq_info
Unexecuted instantiation: wait.c:set_native_irq_info
Unexecuted instantiation: xenoprof.c:set_native_irq_info
Unexecuted instantiation: xmalloc_tlsf.c:set_native_irq_info
Unexecuted instantiation: tmem.c:set_native_irq_info
Unexecuted instantiation: tmem_xen.c:set_native_irq_info
Unexecuted instantiation: tmem_control.c:set_native_irq_info
Unexecuted instantiation: llvm.c:set_native_irq_info
Unexecuted instantiation: libelf-loader.c:set_native_irq_info
Unexecuted instantiation: console.c:set_native_irq_info
Unexecuted instantiation: ns16550.c:set_native_irq_info
Unexecuted instantiation: ehci-dbgp.c:set_native_irq_info
Unexecuted instantiation: cpufreq.c:set_native_irq_info
Unexecuted instantiation: cpufreq_ondemand.c:set_native_irq_info
Unexecuted instantiation: cpufreq_misc_governors.c:set_native_irq_info
Unexecuted instantiation: utility.c:set_native_irq_info
Unexecuted instantiation: pci.c:set_native_irq_info
Unexecuted instantiation: vpci.c:set_native_irq_info
Unexecuted instantiation: header.c:set_native_irq_info
Unexecuted instantiation: msi.c:set_native_irq_info
Unexecuted instantiation: msix.c:set_native_irq_info
Unexecuted instantiation: iommu.c:set_native_irq_info
Unexecuted instantiation: io.c:set_native_irq_info
Unexecuted instantiation: dmar.c:set_native_irq_info
Unexecuted instantiation: utils.c:set_native_irq_info
Unexecuted instantiation: qinval.c:set_native_irq_info
Unexecuted instantiation: intremap.c:set_native_irq_info
Unexecuted instantiation: quirks.c:set_native_irq_info
Unexecuted instantiation: vtd.c:set_native_irq_info
Unexecuted instantiation: ats.c:set_native_irq_info
Unexecuted instantiation: iommu_init.c:set_native_irq_info
Unexecuted instantiation: iommu_map.c:set_native_irq_info
Unexecuted instantiation: pci_amd_iommu.c:set_native_irq_info
Unexecuted instantiation: iommu_intr.c:set_native_irq_info
Unexecuted instantiation: iommu_cmd.c:set_native_irq_info
Unexecuted instantiation: iommu_guest.c:set_native_irq_info
Unexecuted instantiation: pmstat.c:set_native_irq_info
Unexecuted instantiation: reboot.c:set_native_irq_info
Unexecuted instantiation: erst.c:set_native_irq_info
Unexecuted instantiation: apei-io.c:set_native_irq_info
Unexecuted instantiation: vga.c:set_native_irq_info
Unexecuted instantiation: xsm_core.c:set_native_irq_info
Unexecuted instantiation: apic.c:set_native_irq_info
Unexecuted instantiation: cpuid.c:set_native_irq_info
Unexecuted instantiation: compat.c:set_native_irq_info
Unexecuted instantiation: crash.c:set_native_irq_info
Unexecuted instantiation: debug.c:set_native_irq_info
Unexecuted instantiation: domain_page.c:set_native_irq_info
Unexecuted instantiation: flushtlb.c:set_native_irq_info
Unexecuted instantiation: hypercall.c:set_native_irq_info
Unexecuted instantiation: i387.c:set_native_irq_info
Unexecuted instantiation: i8259.c:set_native_irq_info
io_apic.c:set_native_irq_info
Line
Count
Source
166
21
{
167
21
    cpumask_copy(irq_to_desc(irq)->affinity, mask);
168
21
}
Unexecuted instantiation: msr.c:set_native_irq_info
Unexecuted instantiation: ioport_emulate.c:set_native_irq_info
Unexecuted instantiation: machine_kexec.c:set_native_irq_info
Unexecuted instantiation: microcode_amd.c:set_native_irq_info
Unexecuted instantiation: microcode_intel.c:set_native_irq_info
Unexecuted instantiation: microcode.c:set_native_irq_info
Unexecuted instantiation: mm.c:set_native_irq_info
Unexecuted instantiation: mpparse.c:set_native_irq_info
Unexecuted instantiation: nmi.c:set_native_irq_info
Unexecuted instantiation: numa.c:set_native_irq_info
Unexecuted instantiation: physdev.c:set_native_irq_info
Unexecuted instantiation: platform_hypercall.c:set_native_irq_info
Unexecuted instantiation: psr.c:set_native_irq_info
Unexecuted instantiation: setup.c:set_native_irq_info
Unexecuted instantiation: smp.c:set_native_irq_info
Unexecuted instantiation: smpboot.c:set_native_irq_info
Unexecuted instantiation: traps.c:set_native_irq_info
Unexecuted instantiation: usercopy.c:set_native_irq_info
Unexecuted instantiation: x86_emulate.c:set_native_irq_info
Unexecuted instantiation: tboot.c:set_native_irq_info
Unexecuted instantiation: hpet.c:set_native_irq_info
Unexecuted instantiation: xstate.c:set_native_irq_info
Unexecuted instantiation: lib.c:set_native_irq_info
Unexecuted instantiation: power.c:set_native_irq_info
Unexecuted instantiation: suspend.c:set_native_irq_info
Unexecuted instantiation: cpu_idle.c:set_native_irq_info
Unexecuted instantiation: amd.c:set_native_irq_info
Unexecuted instantiation: common.c:set_native_irq_info
Unexecuted instantiation: intel.c:set_native_irq_info
Unexecuted instantiation: mwait-idle.c:set_native_irq_info
Unexecuted instantiation: vpmu.c:set_native_irq_info
Unexecuted instantiation: vpmu_amd.c:set_native_irq_info
Unexecuted instantiation: vpmu_intel.c:set_native_irq_info
Unexecuted instantiation: amd_nonfatal.c:set_native_irq_info
Unexecuted instantiation: mce_amd.c:set_native_irq_info
Unexecuted instantiation: mcaction.c:set_native_irq_info
Unexecuted instantiation: barrier.c:set_native_irq_info
Unexecuted instantiation: mctelem.c:set_native_irq_info
Unexecuted instantiation: mce.c:set_native_irq_info
Unexecuted instantiation: mce-apei.c:set_native_irq_info
Unexecuted instantiation: mce_intel.c:set_native_irq_info
Unexecuted instantiation: non-fatal.c:set_native_irq_info
Unexecuted instantiation: util.c:set_native_irq_info
Unexecuted instantiation: vmce.c:set_native_irq_info
Unexecuted instantiation: bigsmp.c:set_native_irq_info
Unexecuted instantiation: x2apic.c:set_native_irq_info
Unexecuted instantiation: default.c:set_native_irq_info
Unexecuted instantiation: delivery.c:set_native_irq_info
Unexecuted instantiation: probe.c:set_native_irq_info
Unexecuted instantiation: asid.c:set_native_irq_info
Unexecuted instantiation: dm.c:set_native_irq_info
Unexecuted instantiation: emulate.c:set_native_irq_info
Unexecuted instantiation: hvm.c:set_native_irq_info
Unexecuted instantiation: i8254.c:set_native_irq_info
Unexecuted instantiation: intercept.c:set_native_irq_info
Unexecuted instantiation: ioreq.c:set_native_irq_info
Unexecuted instantiation: mtrr.c:set_native_irq_info
Unexecuted instantiation: nestedhvm.c:set_native_irq_info
Unexecuted instantiation: pmtimer.c:set_native_irq_info
Unexecuted instantiation: rtc.c:set_native_irq_info
Unexecuted instantiation: save.c:set_native_irq_info
Unexecuted instantiation: stdvga.c:set_native_irq_info
Unexecuted instantiation: vioapic.c:set_native_irq_info
Unexecuted instantiation: viridian.c:set_native_irq_info
Unexecuted instantiation: vlapic.c:set_native_irq_info
Unexecuted instantiation: vmsi.c:set_native_irq_info
Unexecuted instantiation: vpic.c:set_native_irq_info
Unexecuted instantiation: vpt.c:set_native_irq_info
Unexecuted instantiation: intr.c:set_native_irq_info
Unexecuted instantiation: nestedsvm.c:set_native_irq_info
Unexecuted instantiation: svm.c:set_native_irq_info
Unexecuted instantiation: svmdebug.c:set_native_irq_info
Unexecuted instantiation: vmcb.c:set_native_irq_info
Unexecuted instantiation: realmode.c:set_native_irq_info
Unexecuted instantiation: vmcs.c:set_native_irq_info
Unexecuted instantiation: vmx.c:set_native_irq_info
Unexecuted instantiation: vvmx.c:set_native_irq_info
Unexecuted instantiation: paging.c:set_native_irq_info
Unexecuted instantiation: p2m.c:set_native_irq_info
Unexecuted instantiation: p2m-pt.c:set_native_irq_info
Unexecuted instantiation: p2m-ept.c:set_native_irq_info
Unexecuted instantiation: p2m-pod.c:set_native_irq_info
Unexecuted instantiation: altp2m.c:set_native_irq_info
Unexecuted instantiation: guest_walk.c:set_native_irq_info
Unexecuted instantiation: mem_paging.c:set_native_irq_info
Unexecuted instantiation: mem_sharing.c:set_native_irq_info
Unexecuted instantiation: multi.c:set_native_irq_info
Unexecuted instantiation: hap.c:set_native_irq_info
Unexecuted instantiation: nested_hap.c:set_native_irq_info
Unexecuted instantiation: nested_ept.c:set_native_irq_info
Unexecuted instantiation: nmi_int.c:set_native_irq_info
Unexecuted instantiation: op_model_p4.c:set_native_irq_info
Unexecuted instantiation: op_model_ppro.c:set_native_irq_info
Unexecuted instantiation: op_model_athlon.c:set_native_irq_info
Unexecuted instantiation: backtrace.c:set_native_irq_info
Unexecuted instantiation: callback.c:set_native_irq_info
Unexecuted instantiation: descriptor-tables.c:set_native_irq_info
Unexecuted instantiation: emul-gate-op.c:set_native_irq_info
Unexecuted instantiation: emul-inv-op.c:set_native_irq_info
Unexecuted instantiation: emul-priv-op.c:set_native_irq_info
Unexecuted instantiation: iret.c:set_native_irq_info
Unexecuted instantiation: misc-hypercalls.c:set_native_irq_info
Unexecuted instantiation: ro-page-fault.c:set_native_irq_info
Unexecuted instantiation: acpi_mmcfg.c:set_native_irq_info
Unexecuted instantiation: mmconf-fam10h.c:set_native_irq_info
Unexecuted instantiation: mmconfig_64.c:set_native_irq_info
Unexecuted instantiation: mmconfig-shared.c:set_native_irq_info
169
170
unsigned int set_desc_affinity(struct irq_desc *, const cpumask_t *);
171
172
#ifndef arch_hwdom_irqs
173
unsigned int arch_hwdom_irqs(domid_t);
174
#endif
175
176
#ifndef arch_evtchn_bind_pirq
177
void arch_evtchn_bind_pirq(struct domain *, int pirq);
178
#endif
179
180
#endif /* __XEN_IRQ_H__ */