lkml.org 
[lkml]   [2008]   [Sep]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] x86: io-apic - get rid of __DO_ACTION macro
    [Yinghai Lu - Wed, Sep 10, 2008 at 10:30:39AM -0700]
    | On Wed, Sep 10, 2008 at 2:31 AM, Ingo Molnar <mingo@elte.hu> wrote:
    | >
    | > * Yinghai Lu <yhlu.kernel@gmail.com> wrote:
    | >
    | >> On Tue, Sep 9, 2008 at 11:02 PM, Cyrill Gorcunov <gorcunov@gmail.com> wrote:
    | >> > On Wed, Sep 10, 2008 at 12:13 AM, Yinghai Lu <yhlu.kernel@gmail.com> wrote:
    | >> > ...
    | >> >>
    | >> >> hope we can keep using MACRO..
    | >> >>
    | >> >> YH
    | >> >>
    | >> >
    | >> > Btw, Yinghai, what does it mean? To not touch this macro at all?
    | >> > Or you mean about implementation issue (ie the design itself)?
    | >>
    | >> do not touch this macro... and may revisit after 2.6.28
    | >
    | > anything you are particularly worried about? Regressions we should be
    | > able to find pretty quickly, in a central macro like that - and the
    | > macro is quite ugly.
    | >
    |
    | ok, let remove unneeded "if", and use function pointer...
    |
    | void (*extra_action_t)(struct irq_pin_list *entry);
    |
    | +static inline void io_apic_modify_irq(unsigned int irq,
    | + int mask_and, int mask_or,
    | + int mask_and_not, extra_action_t action)
    | +{
    | + int pin;
    | + struct irq_cfg *cfg;
    | + struct irq_pin_list *entry;
    | + cfg = irq_cfg(irq);
    | + for (entry = cfg->irq_2_pin; entry != NULL; entry = entry->next) {
    | + unsigned int reg;
    | + pin = entry->pin;
    | + reg = io_apic_read(entry->apic, 0x10 + pin * 2);
    | + reg &= mask_and;
    | + reg |= mask_or;
    | + reg &= ~mask_and_not;
    | + io_apic_modify(entry->apic, 0x10 + pin * 2, reg);
    | + if (action)
    | + action(entry);
    | + }
    | +}
    |
    | +void extra_read(struct irq_pin_list *entry)
    | + {
    | + /*
    | + * Synchronize the IO-APIC and the CPU by doing
    | + * a dummy read from the IO-APIC
    | + */
    | + struct io_apic __iomem *io_apic;
    | + io_apic = io_apic_base(entry->apic);
    | + readl(&io_apic->data);
    | + }
    |
    |
    | YH
    |

    Yinghai, I've posted second version before you
    proposed this. Let me update it then. (though
    I don't think if we would need some extra actions
    instead of syncs by additional read except for possible
    erranious chips). Anyway - will repost updated version.
    Thanks.

    - Cyrill -


    \
     
     \ /
      Last update: 2008-09-10 19:47    [W:0.024 / U:91.416 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site