TRACE_EVENT(napi_poll,
 
-       TP_PROTO(struct napi_struct *napi),
+       TP_PROTO(struct napi_struct *napi, int work, int budget),
 
-       TP_ARGS(napi),
+       TP_ARGS(napi, work, budget),
 
        TP_STRUCT__entry(
                __field(        struct napi_struct *,   napi)
+               __field(        int,                    work)
+               __field(        int,                    budget)
                __string(       dev_name, napi->dev ? napi->dev->name : NO_DEV)
        ),
 
        TP_fast_assign(
                __entry->napi = napi;
+               __entry->work = work;
+               __entry->budget = budget;
                __assign_str(dev_name, napi->dev ? napi->dev->name : NO_DEV);
        ),
 
-       TP_printk("napi poll on napi struct %p for device %s",
-               __entry->napi, __get_str(dev_name))
+       TP_printk("napi poll on napi struct %p for device %s work %d budget %d",
+                 __entry->napi, __get_str(dev_name),
+                 __entry->work, __entry->budget)
 );
 
 #undef NO_DEV
 
 
                        if (test_bit(NAPI_STATE_SCHED, &napi->state)) {
                                rc = napi->poll(napi, BUSY_POLL_BUDGET);
-                               trace_napi_poll(napi);
+                               trace_napi_poll(napi, rc, BUSY_POLL_BUDGET);
                                if (rc == BUSY_POLL_BUDGET) {
                                        napi_complete_done(napi, rc);
                                        napi_schedule(napi);
        work = 0;
        if (test_bit(NAPI_STATE_SCHED, &n->state)) {
                work = n->poll(n, weight);
-               trace_napi_poll(n);
+               trace_napi_poll(n, work, weight);
        }
 
        WARN_ON_ONCE(work > weight);
 
        event_info = (name, context, cpu, nsecs(sec, nsec), pid, comm, irq, ret)
        all_event_list.append(event_info)
 
-def napi__napi_poll(name, context, cpu, sec, nsec, pid, comm, callchain, napi, dev_name):
+def napi__napi_poll(name, context, cpu, sec, nsec, pid, comm, callchain, napi,
+                    dev_name, work=None, budget=None):
        event_info = (name, context, cpu, nsecs(sec, nsec), pid, comm,
-                       napi, dev_name)
+                       napi, dev_name, work, budget)
        all_event_list.append(event_info)
 
 def net__netif_receive_skb(name, context, cpu, sec, nsec, pid, comm, callchain, skbaddr,
        receive_hunk_list.append(rec_data)
 
 def handle_napi_poll(event_info):
-       (name, context, cpu, time, pid, comm, napi, dev_name) = event_info
+       (name, context, cpu, time, pid, comm, napi, dev_name,
+               work, budget) = event_info
        if cpu in net_rx_dic.keys():
                event_list = net_rx_dic[cpu]['event_list']
                rec_data = {'event_name':'napi_poll',
-                               'dev':dev_name, 'event_t':time}
+                               'dev':dev_name, 'event_t':time,
+                               'work':work, 'budget':budget}
                event_list.append(rec_data)
 
 def handle_netif_rx(event_info):