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