Programatorska konstrukce...
Vitezslav Samel
samel na mail.cz
Úterý Listopad 6 10:18:35 CET 2001
On Tue, Nov 06, 2001 at 09:48:33AM +0100, Jan Marek wrote:
> Dobry den,
>
> tak se dale kvuli PCMCIA stouram v jadre a zatim jsem se zasekl
> na studiu IRQ, kam me zavedly jiste stopy (vytuh nastava pri
> volani funkce request_irq())
>
> Nasel jsem tam takovouto zvlastnost:
>
> --- part of arch/i386/kernel/irq.c
>
> int request_irq(unsigned int irq,
> void (*handler)(int, void *, struct pt_regs *),
> unsigned long irqflags,
> const char * devname,
> void *dev_id)
> {
> int retval;
> struct irqaction * action;
>
> #if 1
> /*
> * Sanity-check: shared interrupts should REALLY pass in
> * a real dev-ID, otherwise we'll have trouble later trying
> * to figure out which interrupt is which (messes up the
> * interrupt freeing logic etc).
> */
> if (irqflags & SA_SHIRQ) {
> if (!dev_id)
> printk("Bad boy: %s (at 0x%x) called us without a dev_id!\n", devname, (&irq)[-1]);
> }
> #endif
[snip]
> Zajima me konstrukce ve funkci printk(), kokretne se mi jedna o
> tento zapis:
>
> (&irq)[-1]. Co to vlastne ma za vyznam, je-li promenna irq
> unsigned int? Kdyby tam bylo pouze &irq, pak by to byla adresa te
> promenne. Ale takhle? Proc tam vlastne neni proste a suse irq?
Neni to jen obskurni zapis, jak dostat adresu instrukce, ktera tuto funkci
volala? Je to jen pro i386 architekturu - pocita se se znamym rozlozenim
promennych a dalsich "blbosti" na zasobniku.
Vita Samel
Další informace o konferenci Linux