Source-Changes-D archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: src/sys/arch/evbarm/iq80310
>> > On Mon, Sep 17, 2012 at 03:40:12AM +0900, Izumi Tsutsui wrote:
>> > > chs@ wrote:
>> > >
>> > > > Module Name: src
>> > > > Committed By: chs
>> > > > Date: Tue Aug 14 15:46:21 UTC 2012
>> > > >
>> > > > Modified Files:
>> > > > src/sys/arch/evbarm/iq80310: iq80310_intr.c
>> > > >
>> > > > Log Message:
>> > > > move evcnt_attach_dynamic() calls later to avoid assertions.
>> > >
>> > >
>> > > - what happens if intr_establish function is called more than once
>> > > against the same irq?
>> > >
>> > > - shouldn't disestablish function have evcnt_detach()?
>> > >
>> > > - isn't it better to defer intr_init() calls after evcnt_init(),
>> > > rather than calling evcnt_attach_dynamic() in intr_establish() ?
>> > >
>> > >
>> > > It looks many other arm intr_init functions
>> > > (arm/ep93xx/ep93xx_intr.c, arm/xscale/ixp425_intr.c etc)
>> > > have the same problem, though.
>> > > (on the other hand marvell variants don't have evcnt at all)
>> :
>> > are you suggesting to undo my change and instead move the call to
>> > iq80310_intr_init() from initarm() to somewhere else? if so, where?
>> >
>> > or are you suggesting to move the calls to evcnt_attach_dynamic()
>> > from iq80310_intr_init() to a separate function which could be called
>> > later? if so, where would be a good place to call that other function?
>>
>> The former is okay because interrupts won't be enabled before
>> at least cpu_configure(9) and I moved such initializations
>> into cpu_configure(9) on several mips and m68k ports.
>>
>> But on evbarm cpu_configure(9) is shared among all boards
>> so we need some hook to handle it? Or call it mainbus_attach()?
>> Or just disable intr evcnt(9) for now?
>
>Now I notice that matt@ already fixed some boards using the latter one
>(split out evcnt_attach_dynamic() int a separate function and call it
> from board dependent mainbus_attach) so following it would be consistent.
>
>http://mail-index.NetBSD.org/source-changes/2012/02/12/msg031698.html
>http://www.nerv.org/~ryo/netbsd/netbsd/?q=id:20120212T163102Z.cef48d9fbe70f5c792f90fc3a83a35e9ec1d6880
>http://cvsweb.NetBSD.org/bsdweb.cgi/src/sys/arch/arm/xscale/i80321_icu.c.diff?r1=1.22&r2=1.23&f=h
>http://cvsweb.NetBSD.org/bsdweb.cgi/src/sys/arch/evbarm/hdl_g/i80321_mainbus.c.diff?r1=1.2&r2=1.3&f=h
I fixed evbarm/{ixdp425,nslu2} in the same way as matt@ did.
ok to commit?
--
ryo shimizu
Index: sys/arch/arm/xscale/ixp425_intr.c
===================================================================
RCS file: /cvsroot/src/sys/arch/arm/xscale/ixp425_intr.c,v
retrieving revision 1.23
diff -U 4 -r1.23 ixp425_intr.c
--- sys/arch/arm/xscale/ixp425_intr.c 1 Jul 2011 20:32:51 -0000 1.23
+++ sys/arch/arm/xscale/ixp425_intr.c 26 Sep 2012 11:19:58 -0000
@@ -307,18 +307,29 @@
iq = &intrq[i];
TAILQ_INIT(&iq->iq_list);
sprintf(iq->iq_name, "irq %d", i);
- evcnt_attach_dynamic(&iq->iq_ev, EVCNT_TYPE_INTR,
- NULL, "ixp425", iq->iq_name);
}
ixp425_intr_calculate_masks();
/* Enable IRQs (don't yet use FIQs). */
enable_interrupts(I32_bit);
}
+void
+ixp425_intr_evcnt_attach(void)
+{
+ struct intrq *iq;
+ int i;
+
+ for (i = 0; i < NIRQ; i++) {
+ iq = &intrq[i];
+ evcnt_attach_dynamic(&iq->iq_ev, EVCNT_TYPE_INTR,
+ NULL, "ixp425", iq->iq_name);
+ }
+}
+
void *
ixp425_intr_establish(int irq, int ipl, int (*func)(void *), void *arg)
{
struct intrq *iq;
Index: sys/arch/arm/xscale/ixp425var.h
===================================================================
RCS file: /cvsroot/src/sys/arch/arm/xscale/ixp425var.h,v
retrieving revision 1.13
diff -U 4 -r1.13 ixp425var.h
--- sys/arch/arm/xscale/ixp425var.h 1 Jul 2011 20:32:51 -0000 1.13
+++ sys/arch/arm/xscale/ixp425var.h 26 Sep 2012 11:19:58 -0000
@@ -145,8 +145,9 @@
void ixp425_attach(struct ixp425_softc *);
void ixp425_icu_init(void);
void ixp425_clk_bootstrap(bus_space_tag_t);
void ixp425_intr_init(void);
+void ixp425_intr_evcnt_attach(void);
void *ixp425_intr_establish(int, int, int (*)(void *), void *);
void ixp425_intr_disestablish(void *);
uint32_t ixp425_sdram_size(void);
Index: sys/arch/evbarm/nslu2/nslu2_mainbus.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbarm/nslu2/nslu2_mainbus.c,v
retrieving revision 1.2
diff -U 4 -r1.2 nslu2_mainbus.c
--- sys/arch/evbarm/nslu2/nslu2_mainbus.c 28 Apr 2008 20:23:17 -0000
1.2
+++ sys/arch/evbarm/nslu2/nslu2_mainbus.c 26 Sep 2012 11:19:58 -0000
@@ -51,8 +51,9 @@
static void
ixp425_mainbus_attach(struct device *parent, struct device *self, void *arg)
{
+ ixp425_intr_evcnt_attach();
ixp425_attach((struct ixp425_softc *) self);
}
CFATTACH_DECL(ixpio_mainbus, sizeof(struct ixp425_softc),
Index: sys/arch/evbarm/ixdp425/ixdp425_mainbus.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbarm/ixdp425/ixdp425_mainbus.c,v
retrieving revision 1.7
diff -U 4 -r1.7 ixdp425_mainbus.c
--- sys/arch/evbarm/ixdp425/ixdp425_mainbus.c 1 Jul 2011 20:42:36 -0000
1.7
+++ sys/arch/evbarm/ixdp425/ixdp425_mainbus.c 26 Sep 2012 11:19:58 -0000
@@ -64,6 +64,7 @@
ixp425_mainbus_attach(struct device *parent, struct device *self, void *aux)
{
struct ixp425_softc *sc = (void *) self;
+ ixp425_intr_evcnt_attach();
ixp425_attach(sc);
}
Home |
Main Index |
Thread Index |
Old Index