Port-vax archive

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

Re: KA46/48 vsbus DMA fallthrough



Felix Deichmann skrev den 2015-05-09 14:26:
Am 08.05.2015 um 23:59 schrieb Christos Zoulas:
But still it should not jump to NULL...

While plowing through the code regarding this, I saw something else that could be a missing break in a case statement in vsbus.c, vsbus_attach().

At least there is no /* FALLTHROUGH */ (anymore) as would be required by KNF. Change vsbus.c r1.23 -> r1.24 looks strange... If this turns out to be an issue, VAXstations 4000 VLC and m60 (KA48 and KA46) would be affected.
Are there any known problems with those machines?

I have a VS 4000/60, too, and could test this, but wouldn't know how to trigger a possible problem.


    switch (vax_boardtype) {
#if VAX49 || VAX53
    case VAX_BTYP_53:
    case VAX_BTYP_49:
        sc->sc_vsregs = vax_map_physmem(VS_REGS_KA49, 1);
        sc->sc_intreq = (char *)sc->sc_vsregs + 12;
        sc->sc_intclr = (char *)sc->sc_vsregs + 12;
        sc->sc_intmsk = (char *)sc->sc_vsregs + 8;
        vsbus_dma_init(sc, 8192);
        break;
#endif

#if VAX46 || VAX48
    case VAX_BTYP_48:
    case VAX_BTYP_46:
        sc->sc_vsregs = vax_map_physmem(VS_REGS, 1);
        sc->sc_intreq = (char *)sc->sc_vsregs + 15;
        sc->sc_intclr = (char *)sc->sc_vsregs + 15;
        sc->sc_intmsk = (char *)sc->sc_vsregs + 12;
        vsbus_dma_init(sc, 32768);
#endif

    default:
        sc->sc_vsregs = vax_map_physmem(VS_REGS, 1);
        sc->sc_intreq = (char *)sc->sc_vsregs + 15;
        sc->sc_intclr = (char *)sc->sc_vsregs + 15;
        sc->sc_intmsk = (char *)sc->sc_vsregs + 12;
[...]
This is most likely a bug, yes, but since the regs are set to the same values
it seems like it do not have any bad side effects.

There are a few lines below in the default case that may have some meaning,
so it is recommended to test it on one of these machines before fixing it.

-- Ragge


Home | Main Index | Thread Index | Old Index