A tasklet is a second way of implementing bottom halves.
A tasklet is represented by a struct:
struct tasklet_struct
which includes these members:
- a handler function
- long int data to be passed to the function
- state - indicates if it is not yet scheduled, scheduled to run, or running on some processor
Two different tasklets can run on different processors at the same time.
But, the same tasklet cannot be running on different processors at the same time.
Tasklets can be created dynamically.
So tasklets are easier to write since they have fewer "locking" requirements than softirqs and are not static.