PERFORCE change 152649 for review - busdma problem

Hans Petter Selasky hselasky at c2i.net
Fri Nov 14 01:13:16 PST 2008


Hi Alexander,

I am going to revert this patch and suggest a new one. I am not sure how to 
best implement it, but will it be Ok if I make the offset adjustment only for 
alignment <= 1 byte ?

Is there any documentation or specification that needs to be updated?

--HPS

On Saturday 08 November 2008, Hans Petter Selasky wrote:
> http://perforce.freebsd.org/chv.cgi?CH=152649
>
> Change 152649 by hselasky at hselasky_laptop001 on 2008/11/08 09:09:50
>
>
> 	Fix a serious BUSDMA bug: The initial virtual page offset is
> 	not retained on the bounce pages, which is what the EHCI and
> 	the OHCI expects.
>
> Affected files ...
>
> .. //depot/projects/usb/src/sys/i386/i386/busdma_machdep.c#10 edit
>
> Differences ...
>
> ==== //depot/projects/usb/src/sys/i386/i386/busdma_machdep.c#10 (text+ko)
> ====
>
> @@ -938,7 +938,8 @@
>  		if (op & BUS_DMASYNC_PREWRITE) {
>  			while (bpage != NULL) {
>  				bcopy((void *)bpage->datavaddr,
> -				      (void *)bpage->vaddr,
> +				      (void *)(bpage->vaddr +
> +				       ((vm_offset_t)(bpage->datavaddr) & PAGE_MASK)),
>  				      bpage->datacount);
>  				bpage = STAILQ_NEXT(bpage, links);
>  			}
> @@ -947,7 +948,8 @@
>
>  		if (op & BUS_DMASYNC_POSTREAD) {
>  			while (bpage != NULL) {
> -				bcopy((void *)bpage->vaddr,
> +				bcopy((void *)(bpage->vaddr +
> +				       ((vm_offset_t)(bpage->datavaddr) & PAGE_MASK)),
>  				      (void *)bpage->datavaddr,
>  				      bpage->datacount);
>  				bpage = STAILQ_NEXT(bpage, links);
> @@ -1149,7 +1151,7 @@
>  	bpage->datavaddr = vaddr;
>  	bpage->datacount = size;
>  	STAILQ_INSERT_TAIL(&(map->bpages), bpage, links);
> -	return (bpage->busaddr);
> +	return (bpage->busaddr + ((vm_offset_t)vaddr & PAGE_MASK));
>  }
>
>  static void


More information about the p4-projects mailing list