[IA64, X86_64] fix swiotlb sizing
Alex Williamson [Thu, 4 Aug 2005 20:06:00 +0000 (13:06 -0700)]
   Fix swiotlb sizing to match what the comments and the kernel
parameters documentation indicate.  Given a default 16k page size kernel
(ia64) and a 2k swiotlb page size, we're off by a multiple of 8 trying
to size the swiotlb.  When specified on the boot line, the swiotlb is
made 8x bigger than requested.  When left to the default value, it's 8x
smaller than the comments indicate.  For x86_64 the multiplier would be
2x.  The patch below fixes this.  Now, what's a good default swiotlb
size?  Apparently we don't really need 64MB.

Signed-off-by: Alex Williamson <alex.williamson@hp.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>

arch/ia64/lib/swiotlb.c

index ab7b3ad..dbc0b3e 100644 (file)
@@ -93,8 +93,7 @@ static int __init
 setup_io_tlb_npages(char *str)
 {
        if (isdigit(*str)) {
-               io_tlb_nslabs = simple_strtoul(str, &str, 0) <<
-                       (PAGE_SHIFT - IO_TLB_SHIFT);
+               io_tlb_nslabs = simple_strtoul(str, &str, 0);
                /* avoid tail segment of size < IO_TLB_SEGSIZE */
                io_tlb_nslabs = ALIGN(io_tlb_nslabs, IO_TLB_SEGSIZE);
        }
@@ -117,7 +116,7 @@ swiotlb_init_with_default_size (size_t default_size)
        unsigned long i;
 
        if (!io_tlb_nslabs) {
-               io_tlb_nslabs = (default_size >> PAGE_SHIFT);
+               io_tlb_nslabs = (default_size >> IO_TLB_SHIFT);
                io_tlb_nslabs = ALIGN(io_tlb_nslabs, IO_TLB_SEGSIZE);
        }