what considered a critical code if preventive preemption is nowhere seen in the driver

64 Views Asked by At

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

0

There are 0 best solutions below