Merge branch 'x86-cleanups-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 cleanups from Ingo Molnar: "Misc cleanups" * 'x86-cleanups-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/mm: Clean up types in xlate_dev_mem_ptr() some more x86: Deinline dma_free_attrs() x86: Deinline dma_alloc_attrs() x86: Remove unused TI_cpu x86: Merge common 32-bit values in asm-offsets.c
This commit is contained in:
commit
d43e4f44ba
6 changed files with 72 additions and 84 deletions
|
@ -127,50 +127,14 @@ static inline gfp_t dma_alloc_coherent_gfp_flags(struct device *dev, gfp_t gfp)
|
||||||
|
|
||||||
#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
|
#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
|
||||||
|
|
||||||
static inline void *
|
void *
|
||||||
dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
||||||
gfp_t gfp, struct dma_attrs *attrs)
|
gfp_t gfp, struct dma_attrs *attrs);
|
||||||
{
|
|
||||||
struct dma_map_ops *ops = get_dma_ops(dev);
|
|
||||||
void *memory;
|
|
||||||
|
|
||||||
gfp &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32);
|
|
||||||
|
|
||||||
if (dma_alloc_from_coherent(dev, size, dma_handle, &memory))
|
|
||||||
return memory;
|
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
dev = &x86_dma_fallback_dev;
|
|
||||||
|
|
||||||
if (!is_device_dma_capable(dev))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (!ops->alloc)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
memory = ops->alloc(dev, size, dma_handle,
|
|
||||||
dma_alloc_coherent_gfp_flags(dev, gfp), attrs);
|
|
||||||
debug_dma_alloc_coherent(dev, size, *dma_handle, memory);
|
|
||||||
|
|
||||||
return memory;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
|
#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
|
||||||
|
|
||||||
static inline void dma_free_attrs(struct device *dev, size_t size,
|
void dma_free_attrs(struct device *dev, size_t size,
|
||||||
void *vaddr, dma_addr_t bus,
|
void *vaddr, dma_addr_t bus,
|
||||||
struct dma_attrs *attrs)
|
struct dma_attrs *attrs);
|
||||||
{
|
|
||||||
struct dma_map_ops *ops = get_dma_ops(dev);
|
|
||||||
|
|
||||||
WARN_ON(irqs_disabled()); /* for portability */
|
|
||||||
|
|
||||||
if (dma_release_from_coherent(dev, get_order(size), vaddr))
|
|
||||||
return;
|
|
||||||
|
|
||||||
debug_dma_free_coherent(dev, size, vaddr, bus);
|
|
||||||
if (ops->free)
|
|
||||||
ops->free(dev, size, vaddr, bus, attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -41,6 +41,25 @@ void common(void) {
|
||||||
OFFSET(pbe_orig_address, pbe, orig_address);
|
OFFSET(pbe_orig_address, pbe, orig_address);
|
||||||
OFFSET(pbe_next, pbe, next);
|
OFFSET(pbe_next, pbe, next);
|
||||||
|
|
||||||
|
#if defined(CONFIG_X86_32) || defined(CONFIG_IA32_EMULATION)
|
||||||
|
BLANK();
|
||||||
|
OFFSET(IA32_SIGCONTEXT_ax, sigcontext_ia32, ax);
|
||||||
|
OFFSET(IA32_SIGCONTEXT_bx, sigcontext_ia32, bx);
|
||||||
|
OFFSET(IA32_SIGCONTEXT_cx, sigcontext_ia32, cx);
|
||||||
|
OFFSET(IA32_SIGCONTEXT_dx, sigcontext_ia32, dx);
|
||||||
|
OFFSET(IA32_SIGCONTEXT_si, sigcontext_ia32, si);
|
||||||
|
OFFSET(IA32_SIGCONTEXT_di, sigcontext_ia32, di);
|
||||||
|
OFFSET(IA32_SIGCONTEXT_bp, sigcontext_ia32, bp);
|
||||||
|
OFFSET(IA32_SIGCONTEXT_sp, sigcontext_ia32, sp);
|
||||||
|
OFFSET(IA32_SIGCONTEXT_ip, sigcontext_ia32, ip);
|
||||||
|
|
||||||
|
BLANK();
|
||||||
|
OFFSET(TI_sysenter_return, thread_info, sysenter_return);
|
||||||
|
|
||||||
|
BLANK();
|
||||||
|
OFFSET(IA32_RT_SIGFRAME_sigcontext, rt_sigframe_ia32, uc.uc_mcontext);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_PARAVIRT
|
#ifdef CONFIG_PARAVIRT
|
||||||
BLANK();
|
BLANK();
|
||||||
OFFSET(PARAVIRT_enabled, pv_info, paravirt_enabled);
|
OFFSET(PARAVIRT_enabled, pv_info, paravirt_enabled);
|
||||||
|
|
|
@ -17,17 +17,6 @@ void foo(void);
|
||||||
|
|
||||||
void foo(void)
|
void foo(void)
|
||||||
{
|
{
|
||||||
OFFSET(IA32_SIGCONTEXT_ax, sigcontext, ax);
|
|
||||||
OFFSET(IA32_SIGCONTEXT_bx, sigcontext, bx);
|
|
||||||
OFFSET(IA32_SIGCONTEXT_cx, sigcontext, cx);
|
|
||||||
OFFSET(IA32_SIGCONTEXT_dx, sigcontext, dx);
|
|
||||||
OFFSET(IA32_SIGCONTEXT_si, sigcontext, si);
|
|
||||||
OFFSET(IA32_SIGCONTEXT_di, sigcontext, di);
|
|
||||||
OFFSET(IA32_SIGCONTEXT_bp, sigcontext, bp);
|
|
||||||
OFFSET(IA32_SIGCONTEXT_sp, sigcontext, sp);
|
|
||||||
OFFSET(IA32_SIGCONTEXT_ip, sigcontext, ip);
|
|
||||||
BLANK();
|
|
||||||
|
|
||||||
OFFSET(CPUINFO_x86, cpuinfo_x86, x86);
|
OFFSET(CPUINFO_x86, cpuinfo_x86, x86);
|
||||||
OFFSET(CPUINFO_x86_vendor, cpuinfo_x86, x86_vendor);
|
OFFSET(CPUINFO_x86_vendor, cpuinfo_x86, x86_vendor);
|
||||||
OFFSET(CPUINFO_x86_model, cpuinfo_x86, x86_model);
|
OFFSET(CPUINFO_x86_model, cpuinfo_x86, x86_model);
|
||||||
|
@ -37,10 +26,6 @@ void foo(void)
|
||||||
OFFSET(CPUINFO_x86_vendor_id, cpuinfo_x86, x86_vendor_id);
|
OFFSET(CPUINFO_x86_vendor_id, cpuinfo_x86, x86_vendor_id);
|
||||||
BLANK();
|
BLANK();
|
||||||
|
|
||||||
OFFSET(TI_sysenter_return, thread_info, sysenter_return);
|
|
||||||
OFFSET(TI_cpu, thread_info, cpu);
|
|
||||||
BLANK();
|
|
||||||
|
|
||||||
OFFSET(PT_EBX, pt_regs, bx);
|
OFFSET(PT_EBX, pt_regs, bx);
|
||||||
OFFSET(PT_ECX, pt_regs, cx);
|
OFFSET(PT_ECX, pt_regs, cx);
|
||||||
OFFSET(PT_EDX, pt_regs, dx);
|
OFFSET(PT_EDX, pt_regs, dx);
|
||||||
|
@ -60,9 +45,6 @@ void foo(void)
|
||||||
OFFSET(PT_OLDSS, pt_regs, ss);
|
OFFSET(PT_OLDSS, pt_regs, ss);
|
||||||
BLANK();
|
BLANK();
|
||||||
|
|
||||||
OFFSET(IA32_RT_SIGFRAME_sigcontext, rt_sigframe, uc.uc_mcontext);
|
|
||||||
BLANK();
|
|
||||||
|
|
||||||
OFFSET(saved_context_gdt_desc, saved_context, gdt_desc);
|
OFFSET(saved_context_gdt_desc, saved_context, gdt_desc);
|
||||||
BLANK();
|
BLANK();
|
||||||
|
|
||||||
|
|
|
@ -29,27 +29,6 @@ int main(void)
|
||||||
BLANK();
|
BLANK();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_IA32_EMULATION
|
|
||||||
OFFSET(TI_sysenter_return, thread_info, sysenter_return);
|
|
||||||
BLANK();
|
|
||||||
|
|
||||||
#define ENTRY(entry) OFFSET(IA32_SIGCONTEXT_ ## entry, sigcontext_ia32, entry)
|
|
||||||
ENTRY(ax);
|
|
||||||
ENTRY(bx);
|
|
||||||
ENTRY(cx);
|
|
||||||
ENTRY(dx);
|
|
||||||
ENTRY(si);
|
|
||||||
ENTRY(di);
|
|
||||||
ENTRY(bp);
|
|
||||||
ENTRY(sp);
|
|
||||||
ENTRY(ip);
|
|
||||||
BLANK();
|
|
||||||
#undef ENTRY
|
|
||||||
|
|
||||||
OFFSET(IA32_RT_SIGFRAME_sigcontext, rt_sigframe_ia32, uc.uc_mcontext);
|
|
||||||
BLANK();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ENTRY(entry) OFFSET(pt_regs_ ## entry, pt_regs, entry)
|
#define ENTRY(entry) OFFSET(pt_regs_ ## entry, pt_regs, entry)
|
||||||
ENTRY(bx);
|
ENTRY(bx);
|
||||||
ENTRY(cx);
|
ENTRY(cx);
|
||||||
|
|
|
@ -140,6 +140,51 @@ void dma_generic_free_coherent(struct device *dev, size_t size, void *vaddr,
|
||||||
free_pages((unsigned long)vaddr, get_order(size));
|
free_pages((unsigned long)vaddr, get_order(size));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
||||||
|
gfp_t gfp, struct dma_attrs *attrs)
|
||||||
|
{
|
||||||
|
struct dma_map_ops *ops = get_dma_ops(dev);
|
||||||
|
void *memory;
|
||||||
|
|
||||||
|
gfp &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32);
|
||||||
|
|
||||||
|
if (dma_alloc_from_coherent(dev, size, dma_handle, &memory))
|
||||||
|
return memory;
|
||||||
|
|
||||||
|
if (!dev)
|
||||||
|
dev = &x86_dma_fallback_dev;
|
||||||
|
|
||||||
|
if (!is_device_dma_capable(dev))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (!ops->alloc)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
memory = ops->alloc(dev, size, dma_handle,
|
||||||
|
dma_alloc_coherent_gfp_flags(dev, gfp), attrs);
|
||||||
|
debug_dma_alloc_coherent(dev, size, *dma_handle, memory);
|
||||||
|
|
||||||
|
return memory;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(dma_alloc_attrs);
|
||||||
|
|
||||||
|
void dma_free_attrs(struct device *dev, size_t size,
|
||||||
|
void *vaddr, dma_addr_t bus,
|
||||||
|
struct dma_attrs *attrs)
|
||||||
|
{
|
||||||
|
struct dma_map_ops *ops = get_dma_ops(dev);
|
||||||
|
|
||||||
|
WARN_ON(irqs_disabled()); /* for portability */
|
||||||
|
|
||||||
|
if (dma_release_from_coherent(dev, get_order(size), vaddr))
|
||||||
|
return;
|
||||||
|
|
||||||
|
debug_dma_free_coherent(dev, size, vaddr, bus);
|
||||||
|
if (ops->free)
|
||||||
|
ops->free(dev, size, vaddr, bus, attrs);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(dma_free_attrs);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* See <Documentation/x86/x86_64/boot-options.txt> for the iommu kernel
|
* See <Documentation/x86/x86_64/boot-options.txt> for the iommu kernel
|
||||||
* parameter documentation.
|
* parameter documentation.
|
||||||
|
|
|
@ -353,18 +353,18 @@ void *xlate_dev_mem_ptr(phys_addr_t phys)
|
||||||
{
|
{
|
||||||
unsigned long start = phys & PAGE_MASK;
|
unsigned long start = phys & PAGE_MASK;
|
||||||
unsigned long offset = phys & ~PAGE_MASK;
|
unsigned long offset = phys & ~PAGE_MASK;
|
||||||
unsigned long vaddr;
|
void *vaddr;
|
||||||
|
|
||||||
/* If page is RAM, we can use __va. Otherwise ioremap and unmap. */
|
/* If page is RAM, we can use __va. Otherwise ioremap and unmap. */
|
||||||
if (page_is_ram(start >> PAGE_SHIFT))
|
if (page_is_ram(start >> PAGE_SHIFT))
|
||||||
return __va(phys);
|
return __va(phys);
|
||||||
|
|
||||||
vaddr = (unsigned long)ioremap_cache(start, PAGE_SIZE);
|
vaddr = ioremap_cache(start, PAGE_SIZE);
|
||||||
/* Only add the offset on success and return NULL if the ioremap() failed: */
|
/* Only add the offset on success and return NULL if the ioremap() failed: */
|
||||||
if (vaddr)
|
if (vaddr)
|
||||||
vaddr += offset;
|
vaddr += offset;
|
||||||
|
|
||||||
return (void *)vaddr;
|
return vaddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr)
|
void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr)
|
||||||
|
@ -373,7 +373,6 @@ void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
iounmap((void __iomem *)((unsigned long)addr & PAGE_MASK));
|
iounmap((void __iomem *)((unsigned long)addr & PAGE_MASK));
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static pte_t bm_pte[PAGE_SIZE/sizeof(pte_t)] __page_aligned_bss;
|
static pte_t bm_pte[PAGE_SIZE/sizeof(pte_t)] __page_aligned_bss;
|
||||||
|
|
Loading…
Add table
Reference in a new issue