summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorFrancois Romieu <romieu@fr.zoreil.com>2012-01-06 20:42:26 (GMT)
committerFrancois Romieu <romieu@fr.zoreil.com>2012-01-07 22:02:37 (GMT)
commit7ab87ff4c770eed71e3777936299292739fcd0fe (patch)
treed6eac281d61f8cdf84a387b2ef455d20f058001d /kernel
parenta5abec1e84c3d9cd197667e5fa94f25c21a2cb8e (diff)
downloadlinux-fsl-qoriq-7ab87ff4c770eed71e3777936299292739fcd0fe.tar.xz
via-rhine: move work from irq handler to softirq and beyond.
- Tx processing is moved from the irq handler to NAPI poll - link events and obscure event processing is moved to its proper work queue Locking rules undergo some changes through the driver. - the driver offers the usual lock-free Tx path - besides the IRQ handler, the link event task schedules the napi handler. The driver thus adds some internal locking to prevent a loop when both must be disabled. - the reset task keeps being scheduled from the Tx watchdog handler, thus with implicit Tx queue disabling. It does not need to care about irq, only napi softirq and competing task. - it is not worth to add a dedicated lock between {g, s}et_wol and rhine_shutdown. It should not hurt no narrow it down a bit though. - rhine_reset_task must keep its huge spin_lock_bh protected section due to : - races for the CAM registers (see rhine_vlan_rx_{add, kill}_vid) - implicit use of napi_enable (see init_registers) - use of the same lock for stats read / update exclusion between napi rx processing and rhine_get_stats - rhine_resume requires a softirq disabled section for the same reason as rhine_reset_task - {free, request}_irq have been replaced with IntrEnable actions in rhine_{suspend, resume}. It is hidden behind init_registers for the latter. Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Diffstat (limited to 'kernel')
0 files changed, 0 insertions, 0 deletions