diff options
author | nox <nox@FreeBSD.org> | 2009-09-19 03:29:24 +0800 |
---|---|---|
committer | nox <nox@FreeBSD.org> | 2009-09-19 03:29:24 +0800 |
commit | adf00a7806686505dd57c9ff1b083ed487019478 (patch) | |
tree | e5016721cdd3b7a5bc60ac35d82c816f961d4653 /emulators/qemu | |
parent | 1987d3f70f378956e1f7ac8bd6d3b34f0d34b5fd (diff) | |
download | freebsd-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/Makefile | 2 | ||||
-rw-r--r-- | emulators/qemu/files/patch-hw-serial.c | 18 |
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)) { |