Re: [fix] emulators/qemu: allow OpenBSD/hppa to boot

2020-10-07 Thread Brad Smith

Go ahead.

Thanks.

On 10/6/2020 4:43 PM, Charlene Wendling wrote:


Hi,

I wanted to install the latest OpenBSD/hppa snapshot using qemu, but
it croaked when configuring lasi0 with:


assertion "(val & LASI_IRQ_BITS) == val" failed

It makes the system impossible to boot. It appears that NetBSD folks
already met the issue and upstreamed a fix [0]. After reading our
lasi(4) code i've found out that we do the same thing.

With the below diff, i've been able to boot the ramdisk, then
perform a full hppa install. It boots properly from that install,
but is stuck after enabling pf if you were curious about that.

Comments/feedback are welcome,

Charlène.


[0] https://github.com/qemu/qemu/commit/b899fe41


Index: Makefile
===
RCS file: /cvs/ports/emulators/qemu/Makefile,v
retrieving revision 1.198
diff -u -p -u -p -r1.198 Makefile
--- Makefile17 Aug 2020 09:58:44 -  1.198
+++ Makefile6 Oct 2020 20:12:32 -
@@ -5,6 +5,7 @@ ONLY_FOR_ARCHS= aarch64 amd64 arm i386 p
  COMMENT=  multi system emulator
  
  DISTNAME=	qemu-5.1.0

+REVISION=  0
  CATEGORIES=   emulators
  MASTER_SITES= https://download.qemu.org/
  EXTRACT_SUFX= .tar.xz
Index: patches/patch-hw_hppa_lasi_c
===
RCS file: patches/patch-hw_hppa_lasi_c
diff -N patches/patch-hw_hppa_lasi_c
--- /dev/null   1 Jan 1970 00:00:00 -
+++ patches/patch-hw_hppa_lasi_c6 Oct 2020 20:12:32 -
@@ -0,0 +1,33 @@
+$OpenBSD$
+
+From upstream commit b899fe41:
+
+OpenBSD initializes the LASI IMR value with 0x to disable all LASI
+interrupts. This triggered an assert() and stopped the emulation.  By replacing
+the check with a warning in the guest log we now allow OpenBSD to boot again.
+
+Index: hw/hppa/lasi.c
+--- hw/hppa/lasi.c.orig
 hw/hppa/lasi.c
+@@ -11,6 +11,7 @@
+
+ #include "qemu/osdep.h"
+ #include "qemu/units.h"
++#include "qemu/log.h"
+ #include "qapi/error.h"
+ #include "cpu.h"
+ #include "trace.h"
+@@ -172,8 +173,11 @@ static MemTxResult lasi_chip_write_with_attrs(void *op
+ /* read-only.  */
+ break;
+ case LASI_IMR:
+-s->imr = val;  /* 0x20 ?? */
+-assert((val & LASI_IRQ_BITS) == val);
++s->imr = val;
++if (((val & LASI_IRQ_BITS) != val) && (val != 0x))
++qemu_log_mask(LOG_GUEST_ERROR,
++"LASI: tried to set invalid %lx IMR value.\n",
++(unsigned long) val);
+ break;
+ case LASI_IPR:
+ /* Any write to IPR clears the register. */




[fix] emulators/qemu: allow OpenBSD/hppa to boot

2020-10-06 Thread Charlene Wendling
Hi,

I wanted to install the latest OpenBSD/hppa snapshot using qemu, but
it croaked when configuring lasi0 with:

> assertion "(val & LASI_IRQ_BITS) == val" failed

It makes the system impossible to boot. It appears that NetBSD folks
already met the issue and upstreamed a fix [0]. After reading our
lasi(4) code i've found out that we do the same thing.

With the below diff, i've been able to boot the ramdisk, then
perform a full hppa install. It boots properly from that install,
but is stuck after enabling pf if you were curious about that.

Comments/feedback are welcome,

Charlène.


[0] https://github.com/qemu/qemu/commit/b899fe41


Index: Makefile
===
RCS file: /cvs/ports/emulators/qemu/Makefile,v
retrieving revision 1.198
diff -u -p -u -p -r1.198 Makefile
--- Makefile17 Aug 2020 09:58:44 -  1.198
+++ Makefile6 Oct 2020 20:12:32 -
@@ -5,6 +5,7 @@ ONLY_FOR_ARCHS= aarch64 amd64 arm i386 p
 COMMENT=   multi system emulator
 
 DISTNAME=  qemu-5.1.0
+REVISION=  0
 CATEGORIES=emulators
 MASTER_SITES=  https://download.qemu.org/
 EXTRACT_SUFX=  .tar.xz
Index: patches/patch-hw_hppa_lasi_c
===
RCS file: patches/patch-hw_hppa_lasi_c
diff -N patches/patch-hw_hppa_lasi_c
--- /dev/null   1 Jan 1970 00:00:00 -
+++ patches/patch-hw_hppa_lasi_c6 Oct 2020 20:12:32 -
@@ -0,0 +1,33 @@
+$OpenBSD$
+
+From upstream commit b899fe41:
+
+OpenBSD initializes the LASI IMR value with 0x to disable all LASI
+interrupts. This triggered an assert() and stopped the emulation.  By replacing
+the check with a warning in the guest log we now allow OpenBSD to boot again.
+
+Index: hw/hppa/lasi.c
+--- hw/hppa/lasi.c.orig
 hw/hppa/lasi.c
+@@ -11,6 +11,7 @@
+ 
+ #include "qemu/osdep.h"
+ #include "qemu/units.h"
++#include "qemu/log.h"
+ #include "qapi/error.h"
+ #include "cpu.h"
+ #include "trace.h"
+@@ -172,8 +173,11 @@ static MemTxResult lasi_chip_write_with_attrs(void *op
+ /* read-only.  */
+ break;
+ case LASI_IMR:
+-s->imr = val;  /* 0x20 ?? */
+-assert((val & LASI_IRQ_BITS) == val);
++s->imr = val;
++if (((val & LASI_IRQ_BITS) != val) && (val != 0x))
++qemu_log_mask(LOG_GUEST_ERROR,
++"LASI: tried to set invalid %lx IMR value.\n",
++(unsigned long) val);
+ break;
+ case LASI_IPR:
+ /* Any write to IPR clears the register. */