diff --git a/block/blk-softirq.c b/block/blk-softirq.c index 06cf9807f49a3be1742a632f9be61c0232fcaf5c..9960f8e3468e46129e6f687dad1e905b4096f5db 100644 --- a/block/blk-softirq.c +++ b/block/blk-softirq.c @@ -12,6 +12,8 @@ #include "blk.h" +#include <linux/measuremore.h> + static DEFINE_PER_CPU(struct list_head, blk_cpu_done); /* @@ -20,6 +22,8 @@ static DEFINE_PER_CPU(struct list_head, blk_cpu_done); */ static __latent_entropy void blk_done_softirq(struct softirq_action *h) { + memo_checkpoint("block_softirq"); + struct list_head *cpu_list, local_list; local_irq_disable(); diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index d1a02877a42c78c35d4a106c4593b34e3d1ee3cf..fbc8f7a9258a9a101bb8c8e4305aaca70bb22415 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -59,6 +59,8 @@ #include "tree.h" #include "rcu.h" +#include <linux/measuremore.h> + #ifdef MODULE_PARAM_PREFIX #undef MODULE_PARAM_PREFIX #endif @@ -3028,6 +3030,8 @@ __rcu_process_callbacks(struct rcu_state *rsp) */ static __latent_entropy void rcu_process_callbacks(struct softirq_action *unused) { + memo_checkpoint("rcu_softirq"); + struct rcu_state *rsp; if (cpu_is_offline(smp_processor_id())) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 3d862f5b0331c1d1ef345ff88b2f4280b7d21ace..3247e639d2cd9bcc303de14e21388c959e99acf2 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -35,6 +35,8 @@ #include "sched.h" +#include <linux/measuremore.h> + /* * Targeted preemption latency for CPU-bound tasks: * (default: 6ms * (1 + ilog(ncpus)), units: nanoseconds) @@ -8493,6 +8495,8 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) { } */ static __latent_entropy void run_rebalance_domains(struct softirq_action *h) { + memo_checkpoint("sched_softirq"); + struct rq *this_rq = this_rq(); enum cpu_idle_type idle = this_rq->idle_balance ? CPU_IDLE : CPU_NOT_IDLE; diff --git a/kernel/softirq.c b/kernel/softirq.c index 5b081b282f07d8fb401e8e216d309cf0e0da4b78..41dd27566ea0a3c3c94fb59c0bc84b1cf9a42020 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -30,6 +30,8 @@ #define CREATE_TRACE_POINTS #include <trace/events/irq.h> +#include <linux/measuremore.h> + /* - No shared variables, all the data are CPU local. - If a softirq needs serialization, let it serialize itself @@ -484,6 +486,8 @@ EXPORT_SYMBOL(__tasklet_hi_schedule_first); static __latent_entropy void tasklet_action(struct softirq_action *a) { + memo_checkpoint("tasklet_softirq"); + struct tasklet_struct *list; local_irq_disable(); @@ -522,6 +526,8 @@ static __latent_entropy void tasklet_hi_action(struct softirq_action *a) { struct tasklet_struct *list; + memo_checkpoint("hi_softirq"); + local_irq_disable(); list = __this_cpu_read(tasklet_hi_vec.head); __this_cpu_write(tasklet_hi_vec.head, NULL); diff --git a/kernel/time/timer.c b/kernel/time/timer.c index 7c477912f36da6141a507c3ac57fc4d9e0365a24..8eb4f1a4f8881d267c64338fb0aa4837e8440da6 100644 --- a/kernel/time/timer.c +++ b/kernel/time/timer.c @@ -54,6 +54,8 @@ #define CREATE_TRACE_POINTS #include <trace/events/timer.h> +#include <linux/measuremore.h> + __visible u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES; EXPORT_SYMBOL(jiffies_64); @@ -1666,6 +1668,8 @@ static inline void __run_timers(struct timer_base *base) */ static __latent_entropy void run_timer_softirq(struct softirq_action *h) { + memo_checkpoint("timer_softirq"); + struct timer_base *base = this_cpu_ptr(&timer_bases[BASE_STD]); /* diff --git a/lib/irq_poll.c b/lib/irq_poll.c index 1d6565e810309eb710523a814983849d76101c6b..86cec747036d361e4329beed3e455957b66f67d7 100644 --- a/lib/irq_poll.c +++ b/lib/irq_poll.c @@ -11,6 +11,8 @@ #include <linux/irq_poll.h> #include <linux/delay.h> +#include <linux/measuremore.h> + static unsigned int irq_poll_budget __read_mostly = 256; static DEFINE_PER_CPU(struct list_head, blk_cpu_iopoll); @@ -76,6 +78,8 @@ EXPORT_SYMBOL(irq_poll_complete); static void __latent_entropy irq_poll_softirq(struct softirq_action *h) { + memo_checkpoint("irq_poll_softirq"); + struct list_head *list = this_cpu_ptr(&blk_cpu_iopoll); int rearm = 0, budget = irq_poll_budget; unsigned long start_time = jiffies; diff --git a/net/core/dev.c b/net/core/dev.c index 272f84ad16e05d36fd2eede2fb39c81919c01bdc..1920bb341b9e0c317084c345d3f56d9bba2453ff 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -144,6 +144,8 @@ #include "net-sysfs.h" +#include <linux/measuremore.h> + /* Instead of increasing this, you should create a hash table. */ #define MAX_GRO_SKBS 8 @@ -3895,6 +3897,8 @@ EXPORT_SYMBOL(netif_rx_ni); static __latent_entropy void net_tx_action(struct softirq_action *h) { + memo_checkpoint("net_tx_softirq"); + struct softnet_data *sd = this_cpu_ptr(&softnet_data); if (sd->completion_queue) { @@ -5261,6 +5265,8 @@ static int napi_poll(struct napi_struct *n, struct list_head *repoll) static __latent_entropy void net_rx_action(struct softirq_action *h) { + memo_checkpoint("net_rx_softirq"); + struct softnet_data *sd = this_cpu_ptr(&softnet_data); unsigned long time_limit = jiffies + 2; int budget = netdev_budget;