Coverage Report

Created: 2017-10-25 09:10

/root/src/xen/xen/include/xen/tasklet.h
Line
Count
Source
1
/******************************************************************************
2
 * tasklet.h
3
 * 
4
 * Tasklets are dynamically-allocatable tasks run in either VCPU context
5
 * (specifically, the idle VCPU's context) or in softirq context, on at most
6
 * one CPU at a time. Softirq versus VCPU context execution is specified
7
 * during per-tasklet initialisation.
8
 */
9
10
#ifndef __XEN_TASKLET_H__
11
#define __XEN_TASKLET_H__
12
13
#include <xen/types.h>
14
#include <xen/list.h>
15
#include <xen/percpu.h>
16
17
struct tasklet
18
{
19
    struct list_head list;
20
    int scheduled_on;
21
    bool_t is_softirq;
22
    bool_t is_running;
23
    bool_t is_dead;
24
    void (*func)(unsigned long);
25
    unsigned long data;
26
};
27
28
#define _DECLARE_TASKLET(name, func, data, softirq)                     \
29
    struct tasklet name = {                                             \
30
        LIST_HEAD_INIT(name.list), -1, softirq, 0, 0, func, data }
31
#define DECLARE_TASKLET(name, func, data)               \
32
    _DECLARE_TASKLET(name, func, data, 0)
33
#define DECLARE_SOFTIRQ_TASKLET(name, func, data)       \
34
    _DECLARE_TASKLET(name, func, data, 1)
35
36
/* Indicates status of tasklet work on each CPU. */
37
DECLARE_PER_CPU(unsigned long, tasklet_work_to_do);
38
1.96M
#define _TASKLET_enqueued  0 /* Tasklet work is enqueued for this CPU. */
39
1.96M
#define _TASKLET_scheduled 1 /* Scheduler has scheduled do_tasklet(). */
40
1.96M
#define TASKLET_enqueued   (1ul << _TASKLET_enqueued)
41
1.96M
#define TASKLET_scheduled  (1ul << _TASKLET_scheduled)
42
43
static inline bool tasklet_work_to_do(unsigned int cpu)
44
1.96M
{
45
1.96M
    /*
46
1.96M
     * Work must be enqueued *and* scheduled. Otherwise there is no work to
47
1.96M
     * do, and/or scheduler needs to run to update idle vcpu priority.
48
1.96M
     */
49
1.96M
    return per_cpu(tasklet_work_to_do, cpu) == (TASKLET_enqueued|
50
1.96M
                                                TASKLET_scheduled);
51
1.96M
}
Unexecuted instantiation: cpu.c:tasklet_work_to_do
Unexecuted instantiation: cpupool.c:tasklet_work_to_do
Unexecuted instantiation: domctl.c:tasklet_work_to_do
domain.c:tasklet_work_to_do
Line
Count
Source
44
1.96M
{
45
1.96M
    /*
46
1.96M
     * Work must be enqueued *and* scheduled. Otherwise there is no work to
47
1.96M
     * do, and/or scheduler needs to run to update idle vcpu priority.
48
1.96M
     */
49
1.96M
    return per_cpu(tasklet_work_to_do, cpu) == (TASKLET_enqueued|
50
1.96M
                                                TASKLET_scheduled);
51
1.96M
}
Unexecuted instantiation: event_2l.c:tasklet_work_to_do
Unexecuted instantiation: event_channel.c:tasklet_work_to_do
Unexecuted instantiation: event_fifo.c:tasklet_work_to_do
Unexecuted instantiation: grant_table.c:tasklet_work_to_do
Unexecuted instantiation: guestcopy.c:tasklet_work_to_do
Unexecuted instantiation: kernel.c:tasklet_work_to_do
Unexecuted instantiation: keyhandler.c:tasklet_work_to_do
Unexecuted instantiation: kexec.c:tasklet_work_to_do
Unexecuted instantiation: kimage.c:tasklet_work_to_do
Unexecuted instantiation: mem_access.c:tasklet_work_to_do
Unexecuted instantiation: memory.c:tasklet_work_to_do
Unexecuted instantiation: monitor.c:tasklet_work_to_do
Unexecuted instantiation: multicall.c:tasklet_work_to_do
Unexecuted instantiation: page_alloc.c:tasklet_work_to_do
Unexecuted instantiation: rangeset.c:tasklet_work_to_do
Unexecuted instantiation: rcupdate.c:tasklet_work_to_do
Unexecuted instantiation: sched_arinc653.c:tasklet_work_to_do
Unexecuted instantiation: sched_credit.c:tasklet_work_to_do
Unexecuted instantiation: sched_credit2.c:tasklet_work_to_do
Unexecuted instantiation: sched_rt.c:tasklet_work_to_do
Unexecuted instantiation: sched_null.c:tasklet_work_to_do
Unexecuted instantiation: schedule.c:tasklet_work_to_do
Unexecuted instantiation: shutdown.c:tasklet_work_to_do
Unexecuted instantiation: softirq.c:tasklet_work_to_do
Unexecuted instantiation: spinlock.c:tasklet_work_to_do
Unexecuted instantiation: stop_machine.c:tasklet_work_to_do
Unexecuted instantiation: symbols.c:tasklet_work_to_do
Unexecuted instantiation: sysctl.c:tasklet_work_to_do
tasklet.c:tasklet_work_to_do
Line
Count
Source
44
44
{
45
44
    /*
46
44
     * Work must be enqueued *and* scheduled. Otherwise there is no work to
47
44
     * do, and/or scheduler needs to run to update idle vcpu priority.
48
44
     */
49
44
    return per_cpu(tasklet_work_to_do, cpu) == (TASKLET_enqueued|
50
44
                                                TASKLET_scheduled);
51
44
}
Unexecuted instantiation: time.c:tasklet_work_to_do
Unexecuted instantiation: timer.c:tasklet_work_to_do
Unexecuted instantiation: trace.c:tasklet_work_to_do
Unexecuted instantiation: vm_event.c:tasklet_work_to_do
Unexecuted instantiation: vsprintf.c:tasklet_work_to_do
Unexecuted instantiation: wait.c:tasklet_work_to_do
Unexecuted instantiation: xenoprof.c:tasklet_work_to_do
Unexecuted instantiation: tmem.c:tasklet_work_to_do
Unexecuted instantiation: tmem_xen.c:tasklet_work_to_do
Unexecuted instantiation: tmem_control.c:tasklet_work_to_do
Unexecuted instantiation: llvm.c:tasklet_work_to_do
Unexecuted instantiation: libelf-loader.c:tasklet_work_to_do
Unexecuted instantiation: console.c:tasklet_work_to_do
Unexecuted instantiation: ns16550.c:tasklet_work_to_do
Unexecuted instantiation: ehci-dbgp.c:tasklet_work_to_do
Unexecuted instantiation: cpufreq.c:tasklet_work_to_do
Unexecuted instantiation: cpufreq_ondemand.c:tasklet_work_to_do
Unexecuted instantiation: cpufreq_misc_governors.c:tasklet_work_to_do
Unexecuted instantiation: utility.c:tasklet_work_to_do
Unexecuted instantiation: vpci.c:tasklet_work_to_do
Unexecuted instantiation: header.c:tasklet_work_to_do
Unexecuted instantiation: msi.c:tasklet_work_to_do
Unexecuted instantiation: msix.c:tasklet_work_to_do
Unexecuted instantiation: iommu.c:tasklet_work_to_do
Unexecuted instantiation: io.c:tasklet_work_to_do
Unexecuted instantiation: pci.c:tasklet_work_to_do
Unexecuted instantiation: utils.c:tasklet_work_to_do
Unexecuted instantiation: qinval.c:tasklet_work_to_do
Unexecuted instantiation: intremap.c:tasklet_work_to_do
Unexecuted instantiation: quirks.c:tasklet_work_to_do
Unexecuted instantiation: vtd.c:tasklet_work_to_do
Unexecuted instantiation: ats.c:tasklet_work_to_do
Unexecuted instantiation: iommu_init.c:tasklet_work_to_do
Unexecuted instantiation: iommu_map.c:tasklet_work_to_do
Unexecuted instantiation: pci_amd_iommu.c:tasklet_work_to_do
Unexecuted instantiation: iommu_intr.c:tasklet_work_to_do
Unexecuted instantiation: iommu_cmd.c:tasklet_work_to_do
Unexecuted instantiation: iommu_guest.c:tasklet_work_to_do
Unexecuted instantiation: pmstat.c:tasklet_work_to_do
Unexecuted instantiation: erst.c:tasklet_work_to_do
Unexecuted instantiation: apei-io.c:tasklet_work_to_do
Unexecuted instantiation: xsm_core.c:tasklet_work_to_do
Unexecuted instantiation: apic.c:tasklet_work_to_do
Unexecuted instantiation: cpuid.c:tasklet_work_to_do
Unexecuted instantiation: compat.c:tasklet_work_to_do
Unexecuted instantiation: crash.c:tasklet_work_to_do
Unexecuted instantiation: debug.c:tasklet_work_to_do
Unexecuted instantiation: domain_page.c:tasklet_work_to_do
Unexecuted instantiation: flushtlb.c:tasklet_work_to_do
Unexecuted instantiation: hypercall.c:tasklet_work_to_do
Unexecuted instantiation: i387.c:tasklet_work_to_do
Unexecuted instantiation: i8259.c:tasklet_work_to_do
Unexecuted instantiation: io_apic.c:tasklet_work_to_do
Unexecuted instantiation: msr.c:tasklet_work_to_do
Unexecuted instantiation: ioport_emulate.c:tasklet_work_to_do
Unexecuted instantiation: irq.c:tasklet_work_to_do
Unexecuted instantiation: machine_kexec.c:tasklet_work_to_do
Unexecuted instantiation: microcode_amd.c:tasklet_work_to_do
Unexecuted instantiation: microcode_intel.c:tasklet_work_to_do
Unexecuted instantiation: microcode.c:tasklet_work_to_do
Unexecuted instantiation: mm.c:tasklet_work_to_do
Unexecuted instantiation: mpparse.c:tasklet_work_to_do
Unexecuted instantiation: nmi.c:tasklet_work_to_do
Unexecuted instantiation: numa.c:tasklet_work_to_do
Unexecuted instantiation: physdev.c:tasklet_work_to_do
Unexecuted instantiation: platform_hypercall.c:tasklet_work_to_do
Unexecuted instantiation: psr.c:tasklet_work_to_do
Unexecuted instantiation: setup.c:tasklet_work_to_do
Unexecuted instantiation: smp.c:tasklet_work_to_do
Unexecuted instantiation: smpboot.c:tasklet_work_to_do
Unexecuted instantiation: traps.c:tasklet_work_to_do
Unexecuted instantiation: usercopy.c:tasklet_work_to_do
Unexecuted instantiation: x86_emulate.c:tasklet_work_to_do
Unexecuted instantiation: tboot.c:tasklet_work_to_do
Unexecuted instantiation: hpet.c:tasklet_work_to_do
Unexecuted instantiation: xstate.c:tasklet_work_to_do
Unexecuted instantiation: lib.c:tasklet_work_to_do
Unexecuted instantiation: power.c:tasklet_work_to_do
Unexecuted instantiation: suspend.c:tasklet_work_to_do
Unexecuted instantiation: cpu_idle.c:tasklet_work_to_do
Unexecuted instantiation: amd.c:tasklet_work_to_do
Unexecuted instantiation: common.c:tasklet_work_to_do
Unexecuted instantiation: intel.c:tasklet_work_to_do
Unexecuted instantiation: mwait-idle.c:tasklet_work_to_do
Unexecuted instantiation: vpmu.c:tasklet_work_to_do
Unexecuted instantiation: vpmu_amd.c:tasklet_work_to_do
Unexecuted instantiation: vpmu_intel.c:tasklet_work_to_do
Unexecuted instantiation: amd_nonfatal.c:tasklet_work_to_do
Unexecuted instantiation: mce_amd.c:tasklet_work_to_do
Unexecuted instantiation: mcaction.c:tasklet_work_to_do
Unexecuted instantiation: barrier.c:tasklet_work_to_do
Unexecuted instantiation: mctelem.c:tasklet_work_to_do
Unexecuted instantiation: mce.c:tasklet_work_to_do
Unexecuted instantiation: mce-apei.c:tasklet_work_to_do
Unexecuted instantiation: mce_intel.c:tasklet_work_to_do
Unexecuted instantiation: non-fatal.c:tasklet_work_to_do
Unexecuted instantiation: util.c:tasklet_work_to_do
Unexecuted instantiation: vmce.c:tasklet_work_to_do
Unexecuted instantiation: bigsmp.c:tasklet_work_to_do
Unexecuted instantiation: x2apic.c:tasklet_work_to_do
Unexecuted instantiation: default.c:tasklet_work_to_do
Unexecuted instantiation: delivery.c:tasklet_work_to_do
Unexecuted instantiation: probe.c:tasklet_work_to_do
Unexecuted instantiation: asid.c:tasklet_work_to_do
Unexecuted instantiation: dm.c:tasklet_work_to_do
Unexecuted instantiation: emulate.c:tasklet_work_to_do
Unexecuted instantiation: hvm.c:tasklet_work_to_do
Unexecuted instantiation: i8254.c:tasklet_work_to_do
Unexecuted instantiation: intercept.c:tasklet_work_to_do
Unexecuted instantiation: ioreq.c:tasklet_work_to_do
Unexecuted instantiation: mtrr.c:tasklet_work_to_do
Unexecuted instantiation: nestedhvm.c:tasklet_work_to_do
Unexecuted instantiation: pmtimer.c:tasklet_work_to_do
Unexecuted instantiation: rtc.c:tasklet_work_to_do
Unexecuted instantiation: save.c:tasklet_work_to_do
Unexecuted instantiation: stdvga.c:tasklet_work_to_do
Unexecuted instantiation: vioapic.c:tasklet_work_to_do
Unexecuted instantiation: viridian.c:tasklet_work_to_do
Unexecuted instantiation: vlapic.c:tasklet_work_to_do
Unexecuted instantiation: vmsi.c:tasklet_work_to_do
Unexecuted instantiation: vpic.c:tasklet_work_to_do
Unexecuted instantiation: vpt.c:tasklet_work_to_do
Unexecuted instantiation: intr.c:tasklet_work_to_do
Unexecuted instantiation: nestedsvm.c:tasklet_work_to_do
Unexecuted instantiation: svm.c:tasklet_work_to_do
Unexecuted instantiation: svmdebug.c:tasklet_work_to_do
Unexecuted instantiation: vmcb.c:tasklet_work_to_do
Unexecuted instantiation: realmode.c:tasklet_work_to_do
Unexecuted instantiation: vmcs.c:tasklet_work_to_do
Unexecuted instantiation: vmx.c:tasklet_work_to_do
Unexecuted instantiation: vvmx.c:tasklet_work_to_do
Unexecuted instantiation: paging.c:tasklet_work_to_do
Unexecuted instantiation: p2m.c:tasklet_work_to_do
Unexecuted instantiation: p2m-pt.c:tasklet_work_to_do
Unexecuted instantiation: p2m-ept.c:tasklet_work_to_do
Unexecuted instantiation: p2m-pod.c:tasklet_work_to_do
Unexecuted instantiation: altp2m.c:tasklet_work_to_do
Unexecuted instantiation: guest_walk.c:tasklet_work_to_do
Unexecuted instantiation: mem_paging.c:tasklet_work_to_do
Unexecuted instantiation: mem_sharing.c:tasklet_work_to_do
Unexecuted instantiation: multi.c:tasklet_work_to_do
Unexecuted instantiation: hap.c:tasklet_work_to_do
Unexecuted instantiation: nested_hap.c:tasklet_work_to_do
Unexecuted instantiation: nested_ept.c:tasklet_work_to_do
Unexecuted instantiation: nmi_int.c:tasklet_work_to_do
Unexecuted instantiation: op_model_p4.c:tasklet_work_to_do
Unexecuted instantiation: op_model_ppro.c:tasklet_work_to_do
Unexecuted instantiation: op_model_athlon.c:tasklet_work_to_do
Unexecuted instantiation: backtrace.c:tasklet_work_to_do
Unexecuted instantiation: callback.c:tasklet_work_to_do
Unexecuted instantiation: descriptor-tables.c:tasklet_work_to_do
Unexecuted instantiation: emul-gate-op.c:tasklet_work_to_do
Unexecuted instantiation: emul-inv-op.c:tasklet_work_to_do
Unexecuted instantiation: emul-priv-op.c:tasklet_work_to_do
Unexecuted instantiation: iret.c:tasklet_work_to_do
Unexecuted instantiation: misc-hypercalls.c:tasklet_work_to_do
Unexecuted instantiation: ro-page-fault.c:tasklet_work_to_do
Unexecuted instantiation: acpi_mmcfg.c:tasklet_work_to_do
52
53
void tasklet_schedule_on_cpu(struct tasklet *t, unsigned int cpu);
54
void tasklet_schedule(struct tasklet *t);
55
void do_tasklet(void);
56
void tasklet_kill(struct tasklet *t);
57
void tasklet_init(
58
    struct tasklet *t, void (*func)(unsigned long), unsigned long data);
59
void softirq_tasklet_init(
60
    struct tasklet *t, void (*func)(unsigned long), unsigned long data);
61
void tasklet_subsys_init(void);
62
63
#endif /* __XEN_TASKLET_H__ */