On Mon, Nov 09, 2020 at 01:42:54PM +0000, John Gould wrote:
> Hi everyone, I am trying to set up a ldom on a sun t5120 machine running
> sparc64 6.8. This did work fine on 6.5. The problem I'm having is that once
> the machine is reset to use the openbsd bootmode  the machine hangs and
> asks for the root device. If one tries to answer this I get no way of
> entering
> sda which is the root device. Here is the ldom.conf file, the boot sequence
> with the hang and the factory-default dmesg. Can someone point me in the
> right direction on how to fix this so that I can install multiple ldom's?
> Does anyone know why it's not finding ( how to make it find ) the bootpath?

Here is the problem:

> mpi0 at pci8 dev 0 function 0 "Symbios Logic SAS1068E" rev 0x04
> vpci_intr_establish_cpu: pci_msi_setmsiq: err 6: unable to map interrupt at 
> msi 

6.8 has a bug where it enables message-signaled interrupts (MSI) on some
sparc64 machines which do not actually support MSI. Various devices then
fail to attach, including your disk controller mpi0.

This problem has been fixed after release. The fix is trivial, see below.

You could run -current instead of 6.8 to get this fix.

Or you could apply this patch to a 6.8-stable CVS checkout and build
your own kernel (since sparc64 doesn't have binary syspatches, you'd
be building your own kernels anyway for errata patches).

===================================================================
RCS file: /cvs/src/sys/arch/sparc64/dev/vpci.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- src/sys/arch/sparc64/dev/vpci.c     2020/06/25 21:43:41     1.31
+++ src/sys/arch/sparc64/dev/vpci.c     2020/10/24 05:07:47     1.32
@@ -1,4 +1,4 @@
-/*     $OpenBSD: vpci.c,v 1.31 2020/06/25 21:43:41 jmatthew Exp $      */
+/*     $OpenBSD: vpci.c,v 1.32 2020/10/24 05:07:47 jmatthew Exp $      */
 /*
  * Copyright (c) 2008 Mark Kettenis <kette...@openbsd.org>
  *
@@ -273,6 +273,8 @@
 
        /* One eq per cpu, limited by the number of eqs. */
        num_eq = min(ncpus, getpropint(sc->sc_node, "#msi-eqs", 36));
+       if (num_eq == 0)
+               return;
 
        if (OF_getprop(sc->sc_node, "msi-address-ranges",
            msi_addr_range, sizeof(msi_addr_range)) <= 0)

Reply via email to