Fix an infinite loop in the emulated SB16 device (c/s 3ef467ebd2f8 on 3.1-testing)
PATCH 1/1 Fix an infinite loop in the emulated SB16 device (c/s 3ef467ebd2f8 on 3.1-testing)
Hi;
Qemu upstream solves "Fix an infinite loop in the emulated SB16 device" issue differently as stated in [2]
Following patch (against xen-3.1-testing) reverts Xen [1] changes and merges qemu ones, please apply.
[1] http://xenbits.xensource.com/xen-3.1-testing.hg?rev/4b22d472bda6
[2] http://lists.gnu.org/archive/html/qemu-devel/2008-01/msg00709.html
Signed-off-by S.Çağlar Onur <[email protected]>
tools/ioemu/hw/dma.c +10 -0
@@ -440,6 +440,13 @@ static void dma_reset(void *opaque)write_cont (d, (0x0d << d->dshift),0 ); } +static int dma_phony_handler (void *opaque,int nchan,int dma_pos,int dma_len) +{ +dolog ("unregistered DMA channel used nchan=%d dma_pos=%d dma_len=%d\n" , + nchan, dma_pos, dma_len); +return dma_pos; +} +/* dshift = 0: 8 bit DMA, 1 = 16 bit DMA */ static void dma_init2 (struct dma_cont *d,int base,int dshift,int page_base,int pageh_base)
@@ -472,6 +479,9 @@ static void dma_init2(struct dma_cont *d }qemu_register_reset (dma_reset, d);dma_reset (d); +for (i =0 ; i <LENOFA (d->regs); ++i) { + d->regs[i].transfer_handler = dma_phony_handler; + } }static void dma_save (QEMUFile *f,void *opaque)
tools/ioemu/hw/sb16.c +8 -4
@@ -1188,6 +1188,12 @@ static int SB_read_DMA (void *opaque, inSB16State *s = opaque;int till, copy, written, free; +if (s->block_size <=0 ) { +dolog ("invalid block size=%d nchan=%d dma_pos=%d dma_len=%d\n" , + s->block_size, nchan, dma_pos, dma_len); +return dma_pos; + } +if (s->left_till_irq <0 ) { s->left_till_irq = s->block_size; }
@@ -1235,10 +1241,8 @@ static int SB_read_DMA (void *opaque, in s->block_size);#endif -if (s->block_size) { -while (s->left_till_irq <=0 ) { - s->left_till_irq = s->block_size + s->left_till_irq; - } +while (s->left_till_irq <=0 ) { + s->left_till_irq = s->block_size + s->left_till_irq; }return dma_pos;
Cheers
Signature · 4 lines
S.Çağlar Onur <[email protected]> http://cekirdek.pardus.org.tr/~caglar/ Linux is like living in a teepee. No Windows, no Gates and an Apache in house!