svn commit: r261580 - stable/9/sys/dev/usb

Hans Petter Selasky hselasky at FreeBSD.org
Fri Feb 7 07:31:55 UTC 2014


Author: hselasky
Date: Fri Feb  7 07:31:54 2014
New Revision: 261580
URL: http://svnweb.freebsd.org/changeset/base/261580

Log:
  MFC r244535, r245995, r261505 and r258961:
  - Use a boundary of zero, hence a PAGE_SIZE boundary
  is implied by all memory allocations.
  - Fix an external compiler warning about write-only
  assigned variable.

Modified:
  stable/9/sys/dev/usb/usb_busdma.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/dev/   (props changed)

Modified: stable/9/sys/dev/usb/usb_busdma.c
==============================================================================
--- stable/9/sys/dev/usb/usb_busdma.c	Fri Feb  7 07:18:52 2014	(r261579)
+++ stable/9/sys/dev/usb/usb_busdma.c	Fri Feb  7 07:31:54 2014	(r261580)
@@ -211,9 +211,7 @@ usbd_m_copy_in(struct usb_page_cache *ca
     struct mbuf *m, usb_size_t src_offset, usb_frlength_t src_len)
 {
 	struct usb_m_copy_in_arg arg = {cache, dst_offset};
-	int error;
-
-	error = m_apply(m, src_offset, src_len, &usbd_m_copy_in_cb, &arg);
+	(void) m_apply(m, src_offset, src_len, &usbd_m_copy_in_cb, &arg);
 }
 #endif
 
@@ -358,8 +356,7 @@ usb_dma_tag_create(struct usb_dma_tag *u
 	if (bus_dma_tag_create
 	    ( /* parent    */ udt->tag_parent->tag,
 	     /* alignment */ align,
-	     /* boundary  */ (align == 1) ?
-	    USB_PAGE_SIZE : 0,
+	     /* boundary  */ 0,
 	     /* lowaddr   */ (2ULL << (udt->tag_parent->dma_bits - 1)) - 1,
 	     /* highaddr  */ BUS_SPACE_MAXADDR,
 	     /* filter    */ NULL,
@@ -418,6 +415,7 @@ usb_pc_common_mem_cb(void *arg, bus_dma_
 	struct usb_page_cache *pc;
 	struct usb_page *pg;
 	usb_size_t rem;
+	bus_size_t off;
 	uint8_t owned;
 
 	pc = arg;
@@ -433,12 +431,13 @@ usb_pc_common_mem_cb(void *arg, bus_dma_
 	if (error) {
 		goto done;
 	}
+
+	off = 0;
 	pg = pc->page_start;
 	pg->physaddr = segs->ds_addr & ~(USB_PAGE_SIZE - 1);
 	rem = segs->ds_addr & (USB_PAGE_SIZE - 1);
 	pc->page_offset_buf = rem;
 	pc->page_offset_end += rem;
-	nseg--;
 #ifdef USB_DEBUG
 	if (rem != (USB_P2U(pc->buffer) & (USB_PAGE_SIZE - 1))) {
 		/*
@@ -449,11 +448,19 @@ usb_pc_common_mem_cb(void *arg, bus_dma_
 		goto done;
 	}
 #endif
-	while (nseg > 0) {
-		nseg--;
-		segs++;
+	while (pc->ismultiseg) {
+		off += USB_PAGE_SIZE;
+		if (off >= (segs->ds_len + rem)) {
+			/* page crossing */
+			nseg--;
+			segs++;
+			off = 0;
+			rem = 0;
+			if (nseg == 0)
+				break;
+		}
 		pg++;
-		pg->physaddr = segs->ds_addr & ~(USB_PAGE_SIZE - 1);
+		pg->physaddr = (segs->ds_addr + off) & ~(USB_PAGE_SIZE - 1);
 	}
 
 done:


More information about the svn-src-stable-9 mailing list