lkml.org 
[lkml]   [2011]   [Aug]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [V3][PATCH 2/6] x86, nmi: create new NMI handler routines
    From
    Date
    On Thu, 2011-08-25 at 12:45 -0400, Don Zickus wrote:
    > +static int __setup_nmi(unsigned int type, struct nmiaction *action)
    > +{
    > + struct nmi_desc *desc = nmi_to_desc(type);
    > + struct nmiaction **a = &(desc->head);
    > + unsigned long flags;
    > +
    > + spin_lock_irqsave(&desc->lock, flags);
    > +
    > + /*
    > + * some handlers need to be executed first otherwise a fake
    > + * event confuses some handlers (kdump uses this flag)
    > + */
    > + if (!(action->flags & NMI_FLAG_FIRST))
    > + while ((*a) != NULL)
    > + a = &((*a)->next);
    > +
    > + action->next = *a;
    > + rcu_assign_pointer(*a, action);
    > +
    > + spin_unlock_irqrestore(&desc->lock, flags);
    > + return 0;
    > +}
    > +
    > +static struct nmiaction *__free_nmi(unsigned int type, const char *name)
    > +{
    > + struct nmi_desc *desc = nmi_to_desc(type);
    > + struct nmiaction *n, **np = &(desc->head);
    > + unsigned long flags;
    > +
    > + spin_lock_irqsave(&desc->lock, flags);
    > +
    > + while ((*np) != NULL) {
    > + n = *np;
    > +
    > + /*
    > + * the name passed in to describe the nmi handler
    > + * is used as the lookup key
    > + */
    > + if (!strcmp(n->name, name)) {
    > + WARN(in_nmi(),
    > + "Trying to free NMI (%s) from NMI context!\n", n->name);
    > + rcu_assign_pointer(*np, n->next);
    > + break;
    > + }
    > + np = &(n->next);
    > + }
    > +
    > + spin_unlock_irqrestore(&desc->lock, flags);
    > + synchronize_rcu();
    > + return (*np);
    > +}

    Probably not worth fixing, but if someone was silly enough to register
    with an already existing name we're up shit creek, right? :-)


    \
     
     \ /
      Last update: 2011-08-26 11:47    [W:2.913 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site