[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [Patch] Constrain DMADOM/swiotlb allocations to 1G phys to fix b44 NIC driver
How much should we care about Broadcom 4400? Wasn't it mainly used in old notebooks? -- Keir On 28/11/06 15:46, "Stephen C. Tweedie" <sct@xxxxxxxxxx> wrote: > Hi all, > > The b44 driver currently won't load on Xen kernels with 1G memory or > more. It tries to set a pci dma mask of 0x3ffffff (ie. it can only > address 1G physical memory), but the swiotlb cannot deal with this --- > swiotlb memory is allocated from the hypervisor's DMADOM heap, which is > restricted to the bottom 2GB of physical memory. So the pci dma mask > cannot be set and the driver load fails with > > b44 0000:03:00.0: No usable DMA configuration, aborting. > > It turns out that this 2GB / 31-bit constraint is magically hardcoded in > a couple of places rather than being read correctly from config.h. So > this patch fixes that; changes config.h to specify a 1GB / 30-bit > constraint for the DMADOM heap; and changes the x86/x86_64 swiotlb to > request a 30-bit constraint for allocations of the swiotlb memory. > > With this in place, b44 works. (Red Hat bugzilla #208242). > > --Stephen > > # HG changeset patch > # User Stephen Tweedie <sct@xxxxxxxxxx> > # Date 1164722972 0 > # Node ID 6cbddc31f52d0bad2aa4b13452a4092dfeada47f > # Parent 0af1ba62a14b4eaf1c0687d855edc7307edb21ba > Clean up the DMADOM physical upper limit handling to properly honour > settings in config.h. > > Set the upper limit for DMADOM and swiotlb allocations to be 30 bits > (1G) instead of 31 bits, to allow the b44 NIC driver to work. > > Signed-off-by: Stephen Tweedie <sct@xxxxxxxxxx> > > diff -r 0af1ba62a14b -r 6cbddc31f52d > linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c > --- a/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c Tue Nov 28 11:47:28 2006 > +0000 > +++ b/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c Tue Nov 28 14:09:32 2006 > +0000 > @@ -47,8 +47,8 @@ EXPORT_SYMBOL(swiotlb); > */ > #define IO_TLB_SHIFT 11 > > -/* Width of DMA addresses in the IO TLB. 31 bits is an aacraid limitation. */ > -#define IO_TLB_DMA_BITS 31 > +/* Width of DMA addresses in the IO TLB. 30 bits is a b44 limitation. */ > +#define IO_TLB_DMA_BITS 30 > > static int swiotlb_force; > static char *iotlb_virt_start; > diff -r 0af1ba62a14b -r 6cbddc31f52d xen/common/memory.c > --- a/xen/common/memory.c Tue Nov 28 11:47:28 2006 +0000 > +++ b/xen/common/memory.c Tue Nov 28 14:09:32 2006 +0000 > @@ -328,7 +328,7 @@ static long memory_exchange(XEN_GUEST_HA > (exch.out.address_bits < > (get_order_from_pages(max_page) + PAGE_SHIFT)) ) > { > - if ( exch.out.address_bits < 31 ) > + if ( exch.out.address_bits < MAX_DMADOM_BITS ) > { > rc = -ENOMEM; > goto fail_early; > @@ -541,7 +541,7 @@ long do_memory_op(unsigned long cmd, XEN > (reservation.address_bits < > (get_order_from_pages(max_page) + PAGE_SHIFT)) ) > { > - if ( reservation.address_bits < 31 ) > + if ( reservation.address_bits < MAX_DMADOM_BITS ) > return start_extent; > args.memflags = MEMF_dma; > } > diff -r 0af1ba62a14b -r 6cbddc31f52d xen/include/asm-ia64/config.h > --- a/xen/include/asm-ia64/config.h Tue Nov 28 11:47:28 2006 +0000 > +++ b/xen/include/asm-ia64/config.h Tue Nov 28 14:09:32 2006 +0000 > @@ -41,7 +41,9 @@ > #define CONFIG_IOSAPIC > #define supervisor_mode_kernel (0) > > -#define MAX_DMADOM_PFN (0x7FFFFFFFUL >> PAGE_SHIFT) /* 31 addressable bits */ > +#define MAX_DMADOM_BITS 30 > +#define MAX_DMADOM_MASK ((1UL << MAX_DMADOM_BITS) - 1) > +#define MAX_DMADOM_PFN (MAX_DMADOM_MASK >> PAGE_SHIFT) > > /* If PERFC is used, include privop maps. */ > #ifdef PERF_COUNTERS > diff -r 0af1ba62a14b -r 6cbddc31f52d xen/include/asm-x86/config.h > --- a/xen/include/asm-x86/config.h Tue Nov 28 11:47:28 2006 +0000 > +++ b/xen/include/asm-x86/config.h Tue Nov 28 14:09:32 2006 +0000 > @@ -82,7 +82,9 @@ > /* Debug stack is restricted to 8kB by guard pages. */ > #define DEBUG_STACK_SIZE 8192 > > -#define MAX_DMADOM_PFN 0x7FFFFUL /* 31 addressable bits */ > +#define MAX_DMADOM_BITS 30 > +#define MAX_DMADOM_MASK ((1UL << MAX_DMADOM_BITS) - 1) > +#define MAX_DMADOM_PFN (MAX_DMADOM_MASK >> PAGE_SHIFT) > > #ifndef __ASSEMBLY__ > extern unsigned long _end; /* standard ELF symbol */ > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |