/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__ */ |