Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: powerpc/pic/intr.c IPL_HIGH vs IPL_NONE



Hi! all,


May I do revert of this change for bebox, ofppc (Openpic+8259), and
macppc (Ohare)?

Thanks,
--
kiyohara

From: KIYOHARA Takashi <kiyohara%kk.iij4u.or.jp@localhost>
Date: Wed, 03 Oct 2012 22:46:06 +0900 (JST)

> Hi! macallan@ and all,
> 
> 
> I apologize multi-post.
> I add more descriptions.
> -------
> 
> My bebox hangs up at boot time since change v 1.23 pic/intr.c.
> 
>   
> http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/powerpc/pic/intr.c.diff?r1=1.22&r2=1.23&only_with_tag=MAIN&f=h
> 
> 
> The hangup reason is changing imask[IPL_HIGH] to 0x3ffe0000 from 0x7ffe0000.
> The bit30 indicate establish PIC I8259 with IPL_NONE on bebox.
> 
> sys/arch/bebox/bebox/machdep.c:cpu_startup() ---
> 
>         /*
>          * set up i8259 as a cascade on BeInterruptController irq 26.
>          */
>         intr_establish(16 + 26, IST_LEVEL, IPL_NONE, pic_handle_intr, 
> isa_pic);
> 
> 
> intr_establish() sets IPL_HIGH to is->is_ipl in powerpc/pic/intr.c.
> However it sets IPL_NONE to ih->ih_ipl.
> 
> sys/arch/powerpc/pic/intr.c:intr_establish() ---
> 
>       int maxipl = ipl;
> 
>         if (maxipl == IPL_NONE)
>                 maxipl = IPL_HIGH;
>         :
> 
>         ih->ih_ipl = ipl;
> 
>         :
> 
>         is->is_ipl = maxipl;
> 
> 
> 
> Index: intr.c
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/powerpc/pic/intr.c,v
> retrieving revision 1.22
> retrieving revision 1.23
> diff -u -r1.22 -r1.23
> --- intr.c      7 Jun 2012 04:37:09 -0000       1.22
> +++ intr.c      31 Aug 2012 13:12:52 -0000      1.23
> 
> @@ -362,7 +363,9 @@
>  
>         /* First, figure out which ipl each IRQ uses. */
>         for (irq = 0, is = intrsources; irq < NVIRQ; irq++, is++) {
> -               newmask[is->is_ipl] |= PIC_VIRQ_TO_MASK(irq);
> +               for (ih = is->is_hand; ih != NULL; ih = ih->ih_next) {
> +                       newmask[ih->ih_ipl] |= PIC_VIRQ_TO_MASK(irq);
> +               }
>         }
>  
>         /*
> 
> Shall we call intr_establish() with IPL_HIGH?
> Or more better idea?
> 
> Also I think, this problem happen on sandpoint(ENCPP1, SANDPOINT).
> 
> 
> In the first place, I don't understand this commit log by macallon@.
> 
>   
> http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/powerpc/pic/intr.c.diff?r1=1.22&r2=1.23&only_with_tag=MAIN&f=h
> 
>   when calculating per-IPL virq masks, take into account that shared IRQs may
>   request different IPLs.
>   fixes vr(4)-related problems seen on ofppc
> 
> 
> The is->is_ipl is always set maxipl for shared IRQs.  What problem is this? 
> 
> Thanks,
> --
> kiyohara


Home | Main Index | Thread Index | Old Index