struct list_head __percpu *flush_list;
 };
 
-static int bq_flush_to_queue(struct xdp_bulk_queue *bq, bool in_napi_ctx);
+static int bq_flush_to_queue(struct xdp_bulk_queue *bq);
 
 static struct bpf_map *cpu_map_alloc(union bpf_attr *attr)
 {
 static void __cpu_map_entry_free(struct rcu_head *rcu)
 {
        struct bpf_cpu_map_entry *rcpu;
-       int cpu;
 
        /* This cpu_map_entry have been disconnected from map and one
         * RCU graze-period have elapsed.  Thus, XDP cannot queue any
         */
        rcpu = container_of(rcu, struct bpf_cpu_map_entry, rcu);
 
-       /* Flush remaining packets in percpu bulkq */
-       for_each_online_cpu(cpu) {
-               struct xdp_bulk_queue *bq = per_cpu_ptr(rcpu->bulkq, cpu);
-
-               /* No concurrent bq_enqueue can run at this point */
-               bq_flush_to_queue(bq, false);
-       }
        free_percpu(rcpu->bulkq);
        /* Cannot kthread_stop() here, last put free rcpu resources */
        put_cpu_map_entry(rcpu);
 static void cpu_map_free(struct bpf_map *map)
 {
        struct bpf_cpu_map *cmap = container_of(map, struct bpf_cpu_map, map);
-       int cpu;
        u32 i;
 
        /* At this point bpf_prog->aux->refcnt == 0 and this map->refcnt == 0,
        bpf_clear_redirect_map(map);
        synchronize_rcu();
 
-       /* To ensure all pending flush operations have completed wait for flush
-        * list be empty on _all_ cpus. Because the above synchronize_rcu()
-        * ensures the map is disconnected from the program we can assume no new
-        * items will be added to the list.
-        */
-       for_each_online_cpu(cpu) {
-               struct list_head *flush_list = per_cpu_ptr(cmap->flush_list, cpu);
-
-               while (!list_empty(flush_list))
-                       cond_resched();
-       }
-
        /* For cpu_map the remote CPUs can still be using the entries
         * (struct bpf_cpu_map_entry).
         */
        .map_check_btf          = map_check_no_btf,
 };
 
-static int bq_flush_to_queue(struct xdp_bulk_queue *bq, bool in_napi_ctx)
+static int bq_flush_to_queue(struct xdp_bulk_queue *bq)
 {
        struct bpf_cpu_map_entry *rcpu = bq->obj;
        unsigned int processed = 0, drops = 0;
                err = __ptr_ring_produce(q, xdpf);
                if (err) {
                        drops++;
-                       if (likely(in_napi_ctx))
-                               xdp_return_frame_rx_napi(xdpf);
-                       else
-                               xdp_return_frame(xdpf);
+                       xdp_return_frame_rx_napi(xdpf);
                }
                processed++;
        }
        struct xdp_bulk_queue *bq = this_cpu_ptr(rcpu->bulkq);
 
        if (unlikely(bq->count == CPU_MAP_BULK_SIZE))
-               bq_flush_to_queue(bq, true);
+               bq_flush_to_queue(bq);
 
        /* Notice, xdp_buff/page MUST be queued here, long enough for
         * driver to code invoking us to finished, due to driver
        struct xdp_bulk_queue *bq, *tmp;
 
        list_for_each_entry_safe(bq, tmp, flush_list, flush_node) {
-               bq_flush_to_queue(bq, true);
+               bq_flush_to_queue(bq);
 
                /* If already running, costs spin_lock_irqsave + smb_mb */
                wake_up_process(bq->obj->kthread);