lkml.org 
[lkml]   [2010]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v2] [watchdog] combine nmi_watchdog and softlockup
    On Fri, Apr 16, 2010 at 06:32:32PM +0400, Cyrill Gorcunov wrote:
    > On Fri, Apr 16, 2010 at 03:47:14AM +0200, Frederic Weisbecker wrote:
    > [...]
    > > > +
    > > > +/* Callback function for perf event subsystem */
    > > > +void watchdog_overflow_callback(struct perf_event *event, int nmi,
    > > > + struct perf_sample_data *data,
    > > > + struct pt_regs *regs)
    > > > +{
    > > > + int this_cpu = smp_processor_id();
    > > > + unsigned long touch_ts = per_cpu(watchdog_touch_ts, this_cpu);
    > > > +
    > > > + if (touch_ts == 0) {
    > > > + __touch_watchdog();
    > > > + return;
    > > > + }
    > > > +
    > > > + /* check for a hardlockup
    > > > + * This is done by making sure our timer interrupt
    > > > + * is incrementing. The timer interrupt should have
    > > > + * fired multiple times before we overflow'd. If it hasn't
    > > > + * then this is a good indication the cpu is stuck
    > > > + */
    > > > + if (is_hardlockup(this_cpu)) {
    > > > + /* only print hardlockups once */
    > > > + if (cpumask_test_cpu(this_cpu, to_cpumask(hardlockup_mask)))
    > > > + return;
    > > > +
    > > > + if (hardlockup_panic)
    > > > + panic("Watchdog detected hard LOCKUP on cpu %d", this_cpu);
    > > > + else
    > > > + WARN(1, "Watchdog detected hard LOCKUP on cpu %d", this_cpu);
    > > > +
    > > > + cpumask_set_cpu(this_cpu, to_cpumask(hardlockup_mask));
    > >
    > >
    > >
    > > May be have an arch spin lock there to update your cpu mask safely.
    > >
    >
    > Hmm, this is NMI handler path so from what we protect this per-cpu data?
    > Do I miss something? /me confused


    The cpu mask is not per cpu here, this is a shared bitmap, so you
    can race against other cpus NMIs.

    That said, as I suggested, having a per cpu var that we set when we
    warned would be much better than a spinlock here.



    \
     
     \ /
      Last update: 2010-04-16 16:49    [W:0.025 / U:0.044 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site