lkml.org 
[lkml]   [2008]   [Jan]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] call sysrq_timer_list_show from a workqueue
    handle_sysrq can be called from interrupt context. sysrq_timer_list_show
    eventually starts poking at module symbols which take the module mutex.

    so instead, let's just kick off a workqueue.

    [ doesn't happen on my laptop with the keyboard, but does when
    triggered from /proc/sysrq-trigger ]

    Signed-off-by: Kyle McMartin <kyle@mcmartin.ca>
    ---
    diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c
    index de60e1e..09bb030 100644
    --- a/drivers/char/sysrq.c
    +++ b/drivers/char/sysrq.c
    @@ -159,10 +159,16 @@ static struct sysrq_key_op sysrq_sync_op = {
    .enable_mask = SYSRQ_ENABLE_SYNC,
    };

    -static void sysrq_handle_show_timers(int key, struct tty_struct *tty)
    +static void sysrq_show_timers_callback(struct work_struct *whocares)
    {
    sysrq_timer_list_show();
    }
    +static DECLARE_WORK(show_timers_work, sysrq_show_timers_callback);
    +
    +static void sysrq_handle_show_timers(int key, struct tty_struct *tty)
    +{
    + schedule_work(&show_timers_work);
    +}

    static struct sysrq_key_op sysrq_show_timers_op = {
    .handler = sysrq_handle_show_timers,

    \
     
     \ /
      Last update: 2008-01-08 07:33    [W:0.043 / U:91.380 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site