Commit ad32e8cb authored by FUJITA Tomonori's avatar FUJITA Tomonori Committed by Ingo Molnar

swiotlb: Defer swiotlb init printing, export swiotlb_print_info()

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: default avatarFUJITA 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: default avatarIngo Molnar <mingo@elte.hu>
parent 5740afdb
...@@ -41,7 +41,7 @@ struct dma_map_ops swiotlb_dma_ops = { ...@@ -41,7 +41,7 @@ struct dma_map_ops swiotlb_dma_ops = {
void __init swiotlb_dma_init(void) void __init swiotlb_dma_init(void)
{ {
dma_ops = &swiotlb_dma_ops; dma_ops = &swiotlb_dma_ops;
swiotlb_init(); swiotlb_init(1);
} }
void __init pci_swiotlb_init(void) void __init pci_swiotlb_init(void)
...@@ -51,7 +51,7 @@ void __init pci_swiotlb_init(void) ...@@ -51,7 +51,7 @@ void __init pci_swiotlb_init(void)
swiotlb = 1; swiotlb = 1;
printk(KERN_INFO "PCI-DMA: Re-initialize machine vector.\n"); printk(KERN_INFO "PCI-DMA: Re-initialize machine vector.\n");
machvec_init("dig"); machvec_init("dig");
swiotlb_init(); swiotlb_init(1);
dma_ops = &swiotlb_dma_ops; dma_ops = &swiotlb_dma_ops;
#else #else
panic("Unable to find Intel IOMMU"); panic("Unable to find Intel IOMMU");
......
...@@ -345,7 +345,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -345,7 +345,7 @@ void __init setup_arch(char **cmdline_p)
#ifdef CONFIG_SWIOTLB #ifdef CONFIG_SWIOTLB
if (ppc_swiotlb_enable) if (ppc_swiotlb_enable)
swiotlb_init(); swiotlb_init(1);
#endif #endif
paging_init(); paging_init();
......
...@@ -550,7 +550,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -550,7 +550,7 @@ void __init setup_arch(char **cmdline_p)
#ifdef CONFIG_SWIOTLB #ifdef CONFIG_SWIOTLB
if (ppc_swiotlb_enable) if (ppc_swiotlb_enable)
swiotlb_init(); swiotlb_init(1);
#endif #endif
paging_init(); paging_init();
......
...@@ -52,8 +52,7 @@ void __init pci_swiotlb_init(void) ...@@ -52,8 +52,7 @@ void __init pci_swiotlb_init(void)
if (swiotlb_force) if (swiotlb_force)
swiotlb = 1; swiotlb = 1;
if (swiotlb) { if (swiotlb) {
printk(KERN_INFO "PCI-DMA: Using software bounce buffering for IO (SWIOTLB)\n"); swiotlb_init(0);
swiotlb_init();
dma_ops = &swiotlb_dma_ops; dma_ops = &swiotlb_dma_ops;
} }
} }
...@@ -20,8 +20,7 @@ struct scatterlist; ...@@ -20,8 +20,7 @@ struct scatterlist;
*/ */
#define IO_TLB_SHIFT 11 #define IO_TLB_SHIFT 11
extern void extern void swiotlb_init(int verbose);
swiotlb_init(void);
extern void extern void
*swiotlb_alloc_coherent(struct device *hwdev, size_t size, *swiotlb_alloc_coherent(struct device *hwdev, size_t size,
...@@ -94,4 +93,5 @@ extern void __init swiotlb_free(void); ...@@ -94,4 +93,5 @@ extern void __init swiotlb_free(void);
static inline void swiotlb_free(void) { } static inline void swiotlb_free(void) { }
#endif #endif
extern void swiotlb_print_info(void);
#endif /* __LINUX_SWIOTLB_H */ #endif /* __LINUX_SWIOTLB_H */
...@@ -123,8 +123,9 @@ static dma_addr_t swiotlb_virt_to_bus(struct device *hwdev, ...@@ -123,8 +123,9 @@ static dma_addr_t swiotlb_virt_to_bus(struct device *hwdev,
return phys_to_dma(hwdev, virt_to_phys(address)); 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; phys_addr_t pstart, pend;
pstart = virt_to_phys(io_tlb_start); pstart = virt_to_phys(io_tlb_start);
...@@ -142,7 +143,7 @@ static void swiotlb_print_info(unsigned long bytes) ...@@ -142,7 +143,7 @@ static void swiotlb_print_info(unsigned long bytes)
* structures for the software IO TLB used to implement the DMA API. * structures for the software IO TLB used to implement the DMA API.
*/ */
void __init 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; unsigned long i, bytes;
...@@ -178,14 +179,14 @@ swiotlb_init_with_default_size(size_t default_size) ...@@ -178,14 +179,14 @@ swiotlb_init_with_default_size(size_t default_size)
io_tlb_overflow_buffer = alloc_bootmem_low(io_tlb_overflow); io_tlb_overflow_buffer = alloc_bootmem_low(io_tlb_overflow);
if (!io_tlb_overflow_buffer) if (!io_tlb_overflow_buffer)
panic("Cannot allocate SWIOTLB overflow buffer!\n"); panic("Cannot allocate SWIOTLB overflow buffer!\n");
if (verbose)
swiotlb_print_info(bytes); swiotlb_print_info();
} }
void __init 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) ...@@ -262,7 +263,7 @@ swiotlb_late_init_with_default_size(size_t default_size)
if (!io_tlb_overflow_buffer) if (!io_tlb_overflow_buffer)
goto cleanup4; goto cleanup4;
swiotlb_print_info(bytes); swiotlb_print_info();
late_alloc = 1; late_alloc = 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment