qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 16/16] [RFC] dma/rc4030: do multiple calls to


From: Leon Alrae
Subject: Re: [Qemu-devel] [PATCH v3 16/16] [RFC] dma/rc4030: do multiple calls to address_space_rw when doing DMA transfers
Date: Wed, 10 Jun 2015 13:00:48 +0100
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0

Hi Hervé,

On 03/06/2015 21:45, Hervé Poussineau wrote:
> This fixes Windows NT 4.0/MIPS, which was always bugchecking with
> IRQL_NOT_LESS_OR_EQUAL.
> 
> Signed-off-by: Hervé Poussineau <address@hidden>
> ---
>  hw/dma/rc4030.c | 14 ++++++++++++--
>  1 file changed, 12 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/dma/rc4030.c b/hw/dma/rc4030.c
> index 3efa6de..deac0a8 100644
> --- a/hw/dma/rc4030.c
> +++ b/hw/dma/rc4030.c
> @@ -681,6 +681,7 @@ static void rc4030_do_dma(void *opaque, int n, uint8_t 
> *buf, int len, int is_wri
>      rc4030State *s = opaque;
>      hwaddr dma_addr;
>      int dev_to_mem;
> +    int i;
>  
>      s->dma_regs[n][DMA_REG_ENABLE] &= ~(DMA_FLAG_TC_INTR | DMA_FLAG_MEM_INTR 
> | DMA_FLAG_ADDR_INTR);
>  
> @@ -699,8 +700,17 @@ static void rc4030_do_dma(void *opaque, int n, uint8_t 
> *buf, int len, int is_wri
>      dma_addr = s->dma_regs[n][DMA_REG_ADDRESS];
>  
>      /* Read/write data at right place */
> -    address_space_rw(&s->dma_as, dma_addr, MEMTXATTRS_UNSPECIFIED,
> -                     buf, len, is_write);
> +    for (i = 0; i < len; ) {
> +        int ncpy = DMA_PAGESIZE - (dma_addr & (DMA_PAGESIZE - 1));
> +        if (ncpy > len - i) {
> +            ncpy = len - i;
> +        }
> +        address_space_rw(&s->dma_as, dma_addr, MEMTXATTRS_UNSPECIFIED,
> +                         buf + i, ncpy, is_write);
> +
> +        dma_addr += ncpy;
> +        i += ncpy;
> +    }
>  
>      s->dma_regs[n][DMA_REG_ENABLE] |= DMA_FLAG_TC_INTR;
>      s->dma_regs[n][DMA_REG_COUNT] -= len;
> 

I'm sending out current target-mips queue soon and I can include this series,
but I'm not quite sure what to do with this RFC patch. I presume you put RFC
here because it's a workaround for a bug, but it's not clear where the actual
bug is?

Thanks,
Leon



reply via email to

[Prev in Thread] Current Thread [Next in Thread]