Re: if_re does not work

From: M. Warner Losh <imp_at_bsdimp.com>
Date: Tue, 11 Jul 2006 15:44:53 -0600 (MDT)
In message: <20060711.144929.74705658.imp_at_bsdimp.com>
            Warner Losh <imp_at_bsdimp.com> writes:
: > > > In theory the bus_alloc_resource(.., SYS_RES_IRQ, ...) should route an 
: > > > interrupt for the re0 device but it won't show up in the probe line in that 
: > > > case since the probe line is printed before re_attach() is called.  In fact,
: > > > in the failing case, it wasn't bus_alloc_resource() that failed, but
: > > > bus_setup_intr().  This is most likely not an re0 issue however.
: > > > 
: > > > goto-san, can you add printf's to i386/i386/intr_machdep.c:intr_add_handler()
: > > > and kern/kern_intr.c:intr_event_add_handler() to see which of the EINVAL
: > > > cases is being triggered?
: > > 
: > > I added printf() to 2 functions (one in intr_add_handler() and two
: > > in intr_event_add_handler()) and re-build my kernel and reboot my
: > > ThinkPad X40. But I could not get any printf's messages.
: > > 
: > > And I have a question. Why INTR_FAST was added in re_attach()?
: > > When I deleted it and re-build if_re modules, my card was attached.
: > 
: > INTR_FAST added because the driver was converted to use 'fast' interrupts.
: > 
: > I really hope nobody's going to tell me that INTR_FAST isn't supported with
: > cardbus.
: 
: INTR_FAST isn't supported with cardbus at the moment.
: 
: However, that decision dates from a time when you couldn't share fast
: and non-fast interrupts.  Cardbus necessarily shared its function
: interrupt with its card status change interrupt (since there's only
: one interrupt pin on the cardbus bridge).  I'll investigate what it
: takes to make this happen given the current new-world order.  I have
: at least one re cardbus card, I think, so I can do testing.

You can try the following patch.  It just papers over the problem...

Warner

Index: pccbb.c
===================================================================
RCS file: /cache/ncvs/src/sys/dev/pccbb/pccbb.c,v
retrieving revision 1.150
diff -u -r1.150 pccbb.c
--- pccbb.c	3 Jun 2006 21:05:36 -0000	1.150
+++ pccbb.c	11 Jul 2006 21:44:41 -0000
_at__at_ -354,6 +354,7 _at__at_
 	struct cbb_softc *sc = device_get_softc(dev);
 	int err;
 
+#if 0
 	/*
 	 * Well, this is no longer strictly true.  You can have multiple
 	 * FAST ISRs, but can't mix fast and slow, so we have to assume
_at__at_ -362,6 +363,7 _at__at_
 	 */
 	if ((flags & INTR_FAST) != 0)
 		return (EINVAL);
+#endif
 	ih = malloc(sizeof(struct cbb_intrhand), M_DEVBUF, M_NOWAIT);
 	if (ih == NULL)
 		return (ENOMEM);
Received on Tue Jul 11 2006 - 19:47:28 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:58 UTC