in realTek r8169 driver for ethernet it has poll function for polling interrupts which is New API(NAPI)
the rtl_rx called from poll function
either poll or nor rtl_rx do anything to disable kernel preemption except protecting DMA mapped pages got from dma_map_page like
struct page *data;
data = alloc_pages_node(node, GFP_KERNEL, get_order(R8169_RX_BUF_SIZE));
if (!data)
return NULL;
mapping = dma_map_page(d, data, 0, R8169_RX_BUF_SIZE, DMA_FROM_DEVICE);
...
...
code
dma_sync_single_for_cpu(d, addr, pkt_size, DMA_FROM_DEVICE);
....
dma_sync_single_for_device(d, addr, pkt_size, DMA_FROM_DEVICE);
I was under the impression that in even NAPI poll interrupts or interrupt handler we need to disable preemption.
And nowhere in code of the driver contains calls like preempt_disable or get_cpu or semaphores. So I like to know what considered a critical code in kernel driver? can anyone please tell me this and can interrupt be preempted? or in kernel in general
or can anyone point me to specific code in the driver