Skip to content

Day51 Learning Log

Topic

Timer-based Pollable Event Driver


What I Learned

Today I extended the Day50 pollable character driver into a timer-driven asynchronous event framework.

Main topics learned:

  • delayed_work periodic scheduling
  • internal event source design
  • shared event generation helper
  • runtime statistics tracking
  • queue overflow handling
  • sysfs runtime observability
  • epoll integration with timer-generated events

Implemented Features

Event Generation Refactor

Refactored event creation into:

mypoll_generate_event()

All event sources now share the same queue/wakeup path.


delayed_work Timer Source

Added periodic timer-generated events using:

INIT_DELAYED_WORK()
schedule_delayed_work()
cancel_delayed_work_sync()

The timer now behaves as an internal software event producer.


Runtime Control Commands

Implemented userspace control commands:

start
stop
trigger
reset_stats
show_stats

Event Source Tracking

Added:

enum mypoll_event_source

Userspace can now distinguish:

source=manual
source=timer

Runtime Statistics

Added:

struct mypoll_stats

Tracked statistics:

  • generated events
  • dropped events
  • manual events
  • timer events

Queue Overflow Handling

Implemented queue overflow policy:

queue full
drop new event
increment dropped counter

Also ensured:

event sequence only increases on successful queue push

sysfs Runtime Status

Added runtime statistics node:

/sys/class/mypoll/mypoll/stats

This improved driver observability.


epoll Integration

Verified that timer-generated events correctly wake epoll waiters.

Tested flow:

timer event
wake_up_interruptible()
epoll receives EPOLLIN

Python Integration Test

Created automated integration test covering:

  • timer start/stop
  • manual trigger
  • epoll
  • overflow handling
  • reset statistics
  • sysfs validation

Final Result

Day51 transformed the driver from:

simple pollable char driver

into:

asynchronous event-driven framework

This day introduced several important real-world Linux driver concepts:

  • asynchronous event architecture
  • runtime observability
  • backpressure/overflow handling
  • control/data plane separation