dbdma: warn when using unassigned channel
PATCH 1/1 dbdma: warn when using unassigned channel
With this, it's easier to know if a guest uses an invalid and/or unimplemented DMA channel.
--- hw/misc/macio/mac_dbdma.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)
hw/misc/macio/mac_dbdma.c +23 -2
@@ -557,11 +557,13 @@ void DBDMA_register_channel(void *dbdma, int nchan, qemu_irq irq,DBDMA_DPRINTF ("DBDMA_register_channel 0x%x\n" , nchan); +assert (rw); +assert (flush); + ch->irq = irq; ch->rw = rw; ch->flush = flush; ch->io.opaque = opaque; - ch->io.channel = ch; } static void
@@ -775,6 +777,20 @@ static void dbdma_reset(void *opaque)memset (s->channels[i].regs,0 ,DBDMA_SIZE ); } +static void dbdma_unassigned_rw (DBDMA_io *io) +{ +DBDMA_channel *ch = io->channel; +qemu_log_mask (LOG_GUEST_ERROR ,"%s: use of unassigned channel %d\n" , + __func__, ch->channel); +} + +static void dbdma_unassigned_flush (DBDMA_io *io) +{ +DBDMA_channel *ch = io->channel; +qemu_log_mask (LOG_GUEST_ERROR ,"%s: use of unassigned channel %d\n" , + __func__, ch->channel); +} +void *DBDMA_init (MemoryRegion **dbdma_mem) {DBDMAState *s;
@@ -784,8 +800,13 @@ void* DBDMA_init (MemoryRegion **dbdma_mem)for (i =0 ; i <DBDMA_CHANNELS ; i++) {DBDMA_io *io = &s->channels[i].io; +DBDMA_channel *ch = &s->channels[i];qemu_iovec_init (&io->iov,1 ); - s->channels[i].channel = i; + + ch->rw = dbdma_unassigned_rw; + ch->flush = dbdma_unassigned_flush; + ch->channel = i; + ch->io.channel = ch; }memory_region_init_io (&s->mem,NULL , &dbdma_ops, s,"dbdma" ,0x1000 );
Signature · 1 line
2.1.4
Quoted 54 lines · Hervé Poussineau
With this, it's easier to know if a guest uses an invalid and/or unimplemented DMA channel.
Signed-off-by Hervé Poussineau <[email protected]>--- hw/misc/macio/mac_dbdma.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)hw/misc/macio/mac_dbdma.c +18
-1@@ -557,11 +557,13 @@ void DBDMA_register_channel(void *dbdma, int nchan, qemu_irq irq,DBDMA_DPRINTF ("DBDMA_register_channel 0x%x\n" , nchan); +assert (rw); +assert (flush); + ch->irq = irq; ch->rw = rw; ch->flush = flush; ch->io.opaque = opaque; - ch->io.channel = ch; } static void@@ -775,6 +777,20 @@ static void dbdma_reset(void *opaque)memset (s->channels[i].regs,0 ,DBDMA_SIZE ); } +static void dbdma_unassigned_rw (DBDMA_io *io) +{ +DBDMA_channel *ch = io->channel; +qemu_log_mask (LOG_GUEST_ERROR ,"%s: use of unassigned channel %d\n" , + __func__, ch->channel); +} + +static void dbdma_unassigned_flush (DBDMA_io *io) +{ +DBDMA_channel *ch = io->channel; +qemu_log_mask (LOG_GUEST_ERROR ,"%s: use of unassigned channel %d\n" , + __func__, ch->channel); +} +void *DBDMA_init (MemoryRegion **dbdma_mem) {DBDMAState *s;@@ -784,8 +800,13 @@ void* DBDMA_init (MemoryRegion **dbdma_mem)for (i =0 ; i <DBDMA_CHANNELS ; i++) {DBDMA_io *io = &s->channels[i].io; +DBDMA_channel *ch = &s->channels[i];
hw/misc/macio/mac_dbdma.c void* DBDMA_init (MemoryRegion **dbdma_mem) · line 812
Quoted 10 lines
hw/misc/macio/mac_dbdma.c +5
-1qemu_iovec_init (&io->iov,1 ); - s->channels[i].channel = i; + + ch->rw = dbdma_unassigned_rw; + ch->flush = dbdma_unassigned_flush; + ch->channel = i; + ch->io.channel = ch; }memory_region_init_io (&s->mem,NULL , &dbdma_ops, s,"dbdma" ,0x1000 );
Looks reasonable.
Quoted 53 lines · Hervé Poussineau
With this, it's easier to know if a guest uses an invalid and/or unimplemented DMA channel.
Signed-off-by Hervé Poussineau <[email protected]>--- hw/misc/macio/mac_dbdma.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)hw/misc/macio/mac_dbdma.c +18
-1@@ -557,11 +557,13 @@ void DBDMA_register_channel(void *dbdma, int nchan, qemu_irq irq,DBDMA_DPRINTF ("DBDMA_register_channel 0x%x\n" , nchan); +assert (rw); +assert (flush); + ch->irq = irq; ch->rw = rw; ch->flush = flush; ch->io.opaque = opaque; - ch->io.channel = ch; } static void@@ -775,6 +777,20 @@ static void dbdma_reset(void *opaque)memset (s->channels[i].regs,0 ,DBDMA_SIZE ); } +static void dbdma_unassigned_rw (DBDMA_io *io) +{ +DBDMA_channel *ch = io->channel; +qemu_log_mask (LOG_GUEST_ERROR ,"%s: use of unassigned channel %d\n" , + __func__, ch->channel); +} + +static void dbdma_unassigned_flush (DBDMA_io *io) +{ +DBDMA_channel *ch = io->channel; +qemu_log_mask (LOG_GUEST_ERROR ,"%s: use of unassigned channel %d\n" , + __func__, ch->channel); +} +void *DBDMA_init (MemoryRegion **dbdma_mem) {DBDMAState *s;@@ -784,8 +800,13 @@ void* DBDMA_init (MemoryRegion **dbdma_mem)for (i =0 ; i <DBDMA_CHANNELS ; i++) {DBDMA_io *io = &s->channels[i].io; +DBDMA_channel *ch = &s->channels[i];
hw/misc/macio/mac_dbdma.c void* DBDMA_init (MemoryRegion **dbdma_mem) · line 812
Quoted 10 lines
hw/misc/macio/mac_dbdma.c +5
-1qemu_iovec_init (&io->iov,1 ); - s->channels[i].channel = i; + + ch->rw = dbdma_unassigned_rw; + ch->flush = dbdma_unassigned_flush; + ch->channel = i; + ch->io.channel = ch; }memory_region_init_io (&s->mem,NULL , &dbdma_ops, s,"dbdma" ,0x1000 );
ATB,
Mark.
David Gibson
AppliedQuoted 4 lines · Hervé Poussineau
With this, it's easier to know if a guest uses an invalid and/or unimplemented DMA channel.
Signed-off-by Hervé Poussineau <[email protected]>
Merged to ppc-for-2.6, thanks.
Btw, you're likely to get a prompter response if you CC me directly on patches you want merged. I only sometimes have time to go through the qemu-ppc list looking for things.
Quoted 59 lines
--- hw/misc/macio/mac_dbdma.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)hw/misc/macio/mac_dbdma.c +23
-2@@ -557,11 +557,13 @@ void DBDMA_register_channel(void *dbdma, int nchan, qemu_irq irq,DBDMA_DPRINTF ("DBDMA_register_channel 0x%x\n" , nchan); +assert (rw); +assert (flush); + ch->irq = irq; ch->rw = rw; ch->flush = flush; ch->io.opaque = opaque; - ch->io.channel = ch; } static void@@ -775,6 +777,20 @@ static void dbdma_reset(void *opaque)memset (s->channels[i].regs,0 ,DBDMA_SIZE ); } +static void dbdma_unassigned_rw (DBDMA_io *io) +{ +DBDMA_channel *ch = io->channel; +qemu_log_mask (LOG_GUEST_ERROR ,"%s: use of unassigned channel %d\n" , + __func__, ch->channel); +} + +static void dbdma_unassigned_flush (DBDMA_io *io) +{ +DBDMA_channel *ch = io->channel; +qemu_log_mask (LOG_GUEST_ERROR ,"%s: use of unassigned channel %d\n" , + __func__, ch->channel); +} +void *DBDMA_init (MemoryRegion **dbdma_mem) {DBDMAState *s;@@ -784,8 +800,13 @@ void* DBDMA_init (MemoryRegion **dbdma_mem)for (i =0 ; i <DBDMA_CHANNELS ; i++) {DBDMA_io *io = &s->channels[i].io; +DBDMA_channel *ch = &s->channels[i];qemu_iovec_init (&io->iov,1 ); - s->channels[i].channel = i; + + ch->rw = dbdma_unassigned_rw; + ch->flush = dbdma_unassigned_flush; + ch->channel = i; + ch->io.channel = ch; }memory_region_init_io (&s->mem,NULL , &dbdma_ops, s,"dbdma" ,0x1000 );
Signature · 4 lines
David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
Quoted 11 lines · David Gibson
Quoted 4 lines · Hervé Poussineau
With this, it's easier to know if a guest uses an invalid and/or unimplemented DMA channel.
Signed-off-by Hervé Poussineau <[email protected]>Merged to ppc-for-2.6, thanks.
Btw, you're likely to get a prompter response if you CC me directly on patches you want merged. I only sometimes have time to go through the qemu-ppc list looking for things.
David,
I guess the problem is likely that get_maintainers.pl does not list you for ppc related stuff except the spapr files. How long is Alex still going to be away? Maybe you should get listed in some more ppc-related entries as co-maintainer in the MAINTAINERS file, for the time being?
Thomas