Commit c02e1eac authored by Julien Grall's avatar Julien Grall Committed by Stefan Hajnoczi
Browse files

hw/pc.c: Fix converting of ioport_register* to MemoryRegion



The commit 258711 introduced MemoryRegion to replace ioport_region*
for ioport 80h and F0h.
A MemoryRegion needs to have both read and write callback otherwise a segfault
will occur when an access is made.

The previous behaviour of this both ioport is to return 0xffffffffffffffff.
So keep this behaviour.

Reported-by: default avatarAdam Lackorzynski <adam@os.inf.tu-dresden.de>
Signed-off-by: default avatarJulien Grall <julien.grall@citrix.com>
Tested-by: default avatarAdam Lackorzynski <adam@os.inf.tu-dresden.de>
Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent eb7ff6fb
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -103,6 +103,11 @@ static void ioport80_write(void *opaque, hwaddr addr, uint64_t data,
{
}

static uint64_t ioport80_read(void *opaque, hwaddr addr, unsigned size)
{
    return 0xffffffffffffffff;
}

/* MSDOS compatibility mode FPU exception support */
static qemu_irq ferr_irq;

@@ -123,6 +128,11 @@ static void ioportF0_write(void *opaque, hwaddr addr, uint64_t data,
    qemu_irq_lower(ferr_irq);
}

static uint64_t ioportF0_read(void *opaque, hwaddr addr, unsigned size)
{
    return 0xffffffffffffffff;
}

/* TSC handling */
uint64_t cpu_get_tsc(CPUX86State *env)
{
@@ -960,6 +970,7 @@ static void cpu_request_exit(void *opaque, int irq, int level)

static const MemoryRegionOps ioport80_io_ops = {
    .write = ioport80_write,
    .read = ioport80_read,
    .endianness = DEVICE_NATIVE_ENDIAN,
    .impl = {
        .min_access_size = 1,
@@ -969,6 +980,7 @@ static const MemoryRegionOps ioport80_io_ops = {

static const MemoryRegionOps ioportF0_io_ops = {
    .write = ioportF0_write,
    .read = ioportF0_read,
    .endianness = DEVICE_NATIVE_ENDIAN,
    .impl = {
        .min_access_size = 1,