On Fri, 04 Dec 2009 09:34:06 +0000 David Vrabel <david.vrabel@xxxxxxx> wrote: > Andrew Morton wrote: > > On Mon, 24 Aug 2009 15:54:17 +0000 David Vrabel <david.vrabel@xxxxxxx> wrote: > > > >> + if (std->len + dma_len > QTD_MAX_XFER_SIZE) { > >> + dma_len = QTD_MAX_XFER_SIZE - std->len; > >> + ep = ((dma_addr + dma_len) / qset->max_packet) * qset->max_packet; > >> + dma_len = ep - dma_addr; > >> + } > > > > Generates a call to __udivdi3 on i386, which doesn't exist. > > This only happens if CONFIG_HIGHMEM_64G is enabled which isn't a very > interesting configuration so fixing this is low priority. Who said? allmodconfig is commonly used for compilation coverage testing. > I do have a patch but it needs more testing. Please don't merge this code into mainline until that is completed. > > I'm reluctant to convert it to do_div() because I can't conceive of any > > situation in which it makes sense to perform division on a physical bus > > address :( > > I don't understand this comment. Can you think of a way to implement > this in another way? Well I don't know what the code's trying to do. It takes a physical bus address then rounds it down to some multiple of `max_packet'. I can't see how that makes sense in terms of physical hardware unless perhaps max_packet is a power of two, in which case all this code should be using ands, ors and shifts. -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html