swiotlb: Defer swiotlb init printing, export swiotlb_print_info()
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Tue, 10 Nov 2009 10:46:19 +0000 (19:46 +0900)
committerIngo Molnar <mingo@elte.hu>
Tue, 10 Nov 2009 11:32:00 +0000 (12:32 +0100)
This enables us to avoid printing swiotlb memory info when we
initialize swiotlb. After swiotlb initialization, we could find
that we don't need swiotlb.

This patch removes the code to print swiotlb memory info in
swiotlb_init() and exports the function to do that.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Cc: chrisw@sous-sol.org
Cc: dwmw2@infradead.org
Cc: joerg.roedel@amd.com
Cc: muli@il.ibm.com
Cc: tony.luck@intel.com
Cc: benh@kernel.crashing.org
LKML-Reference: <1257849980-22640-9-git-send-email-fujita.tomonori@lab.ntt.co.jp>
[ -v2: merge up conflict ]
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/ia64/kernel/pci-swiotlb.c
arch/powerpc/kernel/setup_32.c
arch/powerpc/kernel/setup_64.c
arch/x86/kernel/pci-swiotlb.c
include/linux/swiotlb.h
lib/swiotlb.c

index 285aae8431c6278d08c6ff862a18fdf66b2e52bf..53292abf846c453b45c2f3e3afcd57ca0e9a6308 100644 (file)
@@ -41,7 +41,7 @@ struct dma_map_ops swiotlb_dma_ops = {
 void __init swiotlb_dma_init(void)
 {
        dma_ops = &swiotlb_dma_ops;
-       swiotlb_init();
+       swiotlb_init(1);
 }
 
 void __init pci_swiotlb_init(void)
@@ -51,7 +51,7 @@ void __init pci_swiotlb_init(void)
                swiotlb = 1;
                printk(KERN_INFO "PCI-DMA: Re-initialize machine vector.\n");
                machvec_init("dig");
-               swiotlb_init();
+               swiotlb_init(1);
                dma_ops = &swiotlb_dma_ops;
 #else
                panic("Unable to find Intel IOMMU");
index 53bcf3d792db1e16bce7066389fa29e7451602a7..b152de3e64d45a3646356b438ae9e7fedd088e4f 100644 (file)
@@ -345,7 +345,7 @@ void __init setup_arch(char **cmdline_p)
 
 #ifdef CONFIG_SWIOTLB
        if (ppc_swiotlb_enable)
-               swiotlb_init();
+               swiotlb_init(1);
 #endif
 
        paging_init();
index 04f638d82fb3cd3ff5387bfe62f395144e4f7c82..df2c9e932b3714b8ef060ac204757157429a3029 100644 (file)
@@ -550,7 +550,7 @@ void __init setup_arch(char **cmdline_p)
 
 #ifdef CONFIG_SWIOTLB
        if (ppc_swiotlb_enable)
-               swiotlb_init();
+               swiotlb_init(1);
 #endif
 
        paging_init();
index aaa6b7839f1e3541e2a36bb67c770bf343075de7..ea20ef7ca523371e66382e24f794ebce55f2bbc1 100644 (file)
@@ -52,8 +52,7 @@ void __init pci_swiotlb_init(void)
        if (swiotlb_force)
                swiotlb = 1;
        if (swiotlb) {
-               printk(KERN_INFO "PCI-DMA: Using software bounce buffering for IO (SWIOTLB)\n");
-               swiotlb_init();
+               swiotlb_init(0);
                dma_ops = &swiotlb_dma_ops;
        }
 }
index 59bafa6902907dbfc570b9ea0ce107fcc2e20163..eb9bdb4d4854d6d12101c9d645a7bbdf691f02aa 100644 (file)
@@ -20,8 +20,7 @@ struct scatterlist;
  */
 #define IO_TLB_SHIFT 11
 
-extern void
-swiotlb_init(void);
+extern void swiotlb_init(int verbose);
 
 extern void
 *swiotlb_alloc_coherent(struct device *hwdev, size_t size,
@@ -94,4 +93,5 @@ extern void __init swiotlb_free(void);
 static inline void swiotlb_free(void) { }
 #endif
 
+extern void swiotlb_print_info(void);
 #endif /* __LINUX_SWIOTLB_H */
index eee512b63f17f804252dff7bb5d62289ac333062..0c12d7cce300d1c8cc465993b3c04e38693fe2d3 100644 (file)
@@ -123,8 +123,9 @@ static dma_addr_t swiotlb_virt_to_bus(struct device *hwdev,
        return phys_to_dma(hwdev, virt_to_phys(address));
 }
 
-static void swiotlb_print_info(unsigned long bytes)
+void swiotlb_print_info(void)
 {
+       unsigned long bytes = io_tlb_nslabs << IO_TLB_SHIFT;
        phys_addr_t pstart, pend;
 
        pstart = virt_to_phys(io_tlb_start);
@@ -142,7 +143,7 @@ static void swiotlb_print_info(unsigned long bytes)
  * structures for the software IO TLB used to implement the DMA API.
  */
 void __init
-swiotlb_init_with_default_size(size_t default_size)
+swiotlb_init_with_default_size(size_t default_size, int verbose)
 {
        unsigned long i, bytes;
 
@@ -178,14 +179,14 @@ swiotlb_init_with_default_size(size_t default_size)
        io_tlb_overflow_buffer = alloc_bootmem_low(io_tlb_overflow);
        if (!io_tlb_overflow_buffer)
                panic("Cannot allocate SWIOTLB overflow buffer!\n");
-
-       swiotlb_print_info(bytes);
+       if (verbose)
+               swiotlb_print_info();
 }
 
 void __init
-swiotlb_init(void)
+swiotlb_init(int verbose)
 {
-       swiotlb_init_with_default_size(64 * (1<<20));   /* default to 64MB */
+       swiotlb_init_with_default_size(64 * (1<<20), verbose);  /* default to 64MB */
 }
 
 /*
@@ -262,7 +263,7 @@ swiotlb_late_init_with_default_size(size_t default_size)
        if (!io_tlb_overflow_buffer)
                goto cleanup4;
 
-       swiotlb_print_info(bytes);
+       swiotlb_print_info();
 
        late_alloc = 1;