aboutsummaryrefslogtreecommitdiffstats
path: root/emulators/qemu
diff options
context:
space:
mode:
authornox <nox@FreeBSD.org>2009-09-19 03:29:24 +0800
committernox <nox@FreeBSD.org>2009-09-19 03:29:24 +0800
commitadf00a7806686505dd57c9ff1b083ed487019478 (patch)
treee5016721cdd3b7a5bc60ac35d82c816f961d4653 /emulators/qemu
parent1987d3f70f378956e1f7ac8bd6d3b34f0d34b5fd (diff)
downloadfreebsd-ports-graphics-adf00a7806686505dd57c9ff1b083ed487019478.tar.gz
freebsd-ports-graphics-adf00a7806686505dd57c9ff1b083ed487019478.tar.zst
freebsd-ports-graphics-adf00a7806686505dd57c9ff1b083ed487019478.zip
- Fix a serial emulation bug affecting (at least) FreeBSD 8's new
uart(4) driver. - Bump PORTREVISION. Reported by: Olivier Cochard-Labbé <olivier@cochard.me> Feature safe: yes
Diffstat (limited to 'emulators/qemu')
-rw-r--r--emulators/qemu/Makefile2
-rw-r--r--emulators/qemu/files/patch-hw-serial.c18
2 files changed, 19 insertions, 1 deletions
diff --git a/emulators/qemu/Makefile b/emulators/qemu/Makefile
index 3e848fc5602..a2fd1511e0c 100644
--- a/emulators/qemu/Makefile
+++ b/emulators/qemu/Makefile
@@ -7,7 +7,7 @@
PORTNAME= qemu
PORTVERSION= 0.10.6
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= emulators
MASTER_SITES= ${MASTER_SITE_SAVANNAH} \
http://bellard.org/qemu/
diff --git a/emulators/qemu/files/patch-hw-serial.c b/emulators/qemu/files/patch-hw-serial.c
new file mode 100644
index 00000000000..a195b85360d
--- /dev/null
+++ b/emulators/qemu/files/patch-hw-serial.c
@@ -0,0 +1,18 @@
+Index: qemu/hw/serial.c
+@@ -196,12 +195,10 @@ static void serial_update_irq(SerialStat
+ * this is not in the specification but is observed on existing
+ * hardware. */
+ tmp_iir = UART_IIR_CTI;
+- } else if ((s->ier & UART_IER_RDI) && (s->lsr & UART_LSR_DR)) {
+- if (!(s->fcr & UART_FCR_FE)) {
+- tmp_iir = UART_IIR_RDI;
+- } else if (s->recv_fifo.count >= s->recv_fifo.itl) {
+- tmp_iir = UART_IIR_RDI;
+- }
++ } else if ((s->ier & UART_IER_RDI) && (s->lsr & UART_LSR_DR) &&
++ (!(s->fcr & UART_FCR_FE) ||
++ s->recv_fifo.count >= s->recv_fifo.itl)) {
++ tmp_iir = UART_IIR_RDI;
+ } else if ((s->ier & UART_IER_THRI) && s->thr_ipending) {
+ tmp_iir = UART_IIR_THRI;
+ } else if ((s->ier & UART_IER_MSI) && (s->msr & UART_MSR_ANY_DELTA)) {