diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-19 07:50:07 -1000 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-19 07:50:07 -1000 | 
| commit | c4222e4635c6d6a689bf69e982f19c9d1ba261e1 (patch) | |
| tree | 2e5954d33ff287da74029815355c353defd3abd0 /arch/sparc/mm | |
| parent | e99cfa2d0634881b8a41d56c48b5956b9a3ba162 (diff) | |
| parent | 311b8935ad4e13bac5880ae3f0c269b0c253d25f (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next
Pull sparc fixes from David Miller:
 "Sparc sparse fixes from Sam Ravnborg"
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next: (67 commits)
  sparc64: fix sparse warnings in int_64.c
  sparc64: fix sparse warning in ftrace.c
  sparc64: fix sparse warning in kprobes.c
  sparc64: fix sparse warning in kgdb_64.c
  sparc64: fix sparse warnings in compat_audit.c
  sparc64: fix sparse warnings in init_64.c
  sparc64: fix sparse warnings in aes_glue.c
  sparc: fix sparse warnings in smp_32.c + smp_64.c
  sparc64: fix sparse warnings in perf_event.c
  sparc64: fix sparse warnings in kprobes.c
  sparc64: fix sparse warning in tsb.c
  sparc64: clean up compat_sigset_t.seta handling
  sparc64: fix sparse "Should it be static?" warnings in signal32.c
  sparc64: fix sparse warnings in sys_sparc32.c
  sparc64: fix sparse warning in pci.c
  sparc64: fix sparse warnings in smp_64.c
  sparc64: fix sparse warning in prom_64.c
  sparc64: fix sparse warning in btext.c
  sparc64: fix sparse warnings in sys_sparc_64.c + unaligned_64.c
  sparc64: fix sparse warning in process_64.c
  ...
Conflicts:
	arch/sparc/include/asm/pgtable_64.h
Diffstat (limited to 'arch/sparc/mm')
| -rw-r--r-- | arch/sparc/mm/fault_32.c | 9 | ||||
| -rw-r--r-- | arch/sparc/mm/fault_64.c | 4 | ||||
| -rw-r--r-- | arch/sparc/mm/init_32.c | 7 | ||||
| -rw-r--r-- | arch/sparc/mm/init_64.c | 9 | ||||
| -rw-r--r-- | arch/sparc/mm/init_64.h | 4 | ||||
| -rw-r--r-- | arch/sparc/mm/io-unit.c | 21 | ||||
| -rw-r--r-- | arch/sparc/mm/iommu.c | 25 | ||||
| -rw-r--r-- | arch/sparc/mm/leon_mm.c | 4 | ||||
| -rw-r--r-- | arch/sparc/mm/mm_32.h | 24 | ||||
| -rw-r--r-- | arch/sparc/mm/srmmu.c | 13 | ||||
| -rw-r--r-- | arch/sparc/mm/srmmu.h | 4 | ||||
| -rw-r--r-- | arch/sparc/mm/tsb.c | 1 | 
12 files changed, 74 insertions, 51 deletions
| diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c index 59dbd4645725..908e8c17c902 100644 --- a/arch/sparc/mm/fault_32.c +++ b/arch/sparc/mm/fault_32.c @@ -26,14 +26,14 @@  #include <asm/pgtable.h>  #include <asm/openprom.h>  #include <asm/oplib.h> +#include <asm/setup.h>  #include <asm/smp.h>  #include <asm/traps.h>  #include <asm/uaccess.h> -int show_unhandled_signals = 1; +#include "mm_32.h" -static void unhandled_fault(unsigned long, struct task_struct *, -		struct pt_regs *) __attribute__ ((noreturn)); +int show_unhandled_signals = 1;  static void __noreturn unhandled_fault(unsigned long address,  				       struct task_struct *tsk, @@ -141,9 +141,6 @@ static void __do_fault_siginfo(int code, int sig, struct pt_regs *regs,  	force_sig_info (sig, &info, current);  } -extern unsigned long safe_compute_effective_address(struct pt_regs *, -						    unsigned int); -  static unsigned long compute_si_addr(struct pt_regs *regs, int text_fault)  {  	unsigned int insn; diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c index 4ced3fc66130..587cd0565128 100644 --- a/arch/sparc/mm/fault_64.c +++ b/arch/sparc/mm/fault_64.c @@ -32,6 +32,7 @@  #include <asm/lsu.h>  #include <asm/sections.h>  #include <asm/mmu_context.h> +#include <asm/setup.h>  int show_unhandled_signals = 1; @@ -196,9 +197,6 @@ static void do_fault_siginfo(int code, int sig, struct pt_regs *regs,  	force_sig_info(sig, &info, current);  } -extern int handle_ldf_stq(u32, struct pt_regs *); -extern int handle_ld_nf(u32, struct pt_regs *); -  static unsigned int get_fault_insn(struct pt_regs *regs, unsigned int insn)  {  	if (!insn) { diff --git a/arch/sparc/mm/init_32.c b/arch/sparc/mm/init_32.c index db6987082805..eb8287155279 100644 --- a/arch/sparc/mm/init_32.c +++ b/arch/sparc/mm/init_32.c @@ -31,10 +31,13 @@  #include <asm/pgtable.h>  #include <asm/vaddrs.h>  #include <asm/pgalloc.h>	/* bug in asm-generic/tlb.h: check_pgt_cache */ +#include <asm/setup.h>  #include <asm/tlb.h>  #include <asm/prom.h>  #include <asm/leon.h> +#include "mm_32.h" +  unsigned long *sparc_valid_addr_bitmap;  EXPORT_SYMBOL(sparc_valid_addr_bitmap); @@ -63,7 +66,6 @@ void show_mem(unsigned int filter)  } -extern unsigned long cmdline_memory_size;  unsigned long last_valid_pfn;  unsigned long calc_highpages(void) @@ -246,9 +248,6 @@ unsigned long __init bootmem_init(unsigned long *pages_avail)   * init routine based upon the Sun model type on the Sparc.   *   */ -extern void srmmu_paging_init(void); -extern void device_scan(void); -  void __init paging_init(void)  {  	srmmu_paging_init(); diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c index ed3c969a5f4c..16b58ff11e65 100644 --- a/arch/sparc/mm/init_64.c +++ b/arch/sparc/mm/init_64.c @@ -47,6 +47,7 @@  #include <asm/prom.h>  #include <asm/mdesc.h>  #include <asm/cpudata.h> +#include <asm/setup.h>  #include <asm/irq.h>  #include "init_64.h" @@ -794,11 +795,11 @@ struct node_mem_mask {  static struct node_mem_mask node_masks[MAX_NUMNODES];  static int num_node_masks; +#ifdef CONFIG_NEED_MULTIPLE_NODES +  int numa_cpu_lookup_table[NR_CPUS];  cpumask_t numa_cpumask_lookup_table[MAX_NUMNODES]; -#ifdef CONFIG_NEED_MULTIPLE_NODES -  struct mdesc_mblock {  	u64	base;  	u64	size; @@ -887,17 +888,21 @@ static void __init allocate_node_data(int nid)  static void init_node_masks_nonnuma(void)  { +#ifdef CONFIG_NEED_MULTIPLE_NODES  	int i; +#endif  	numadbg("Initializing tables for non-numa.\n");  	node_masks[0].mask = node_masks[0].val = 0;  	num_node_masks = 1; +#ifdef CONFIG_NEED_MULTIPLE_NODES  	for (i = 0; i < NR_CPUS; i++)  		numa_cpu_lookup_table[i] = 0;  	cpumask_setall(&numa_cpumask_lookup_table[0]); +#endif  }  #ifdef CONFIG_NEED_MULTIPLE_NODES diff --git a/arch/sparc/mm/init_64.h b/arch/sparc/mm/init_64.h index 5d3782deb403..0668b364f44d 100644 --- a/arch/sparc/mm/init_64.h +++ b/arch/sparc/mm/init_64.h @@ -21,7 +21,7 @@ extern unsigned int sparc64_highest_unlocked_tlb_ent;  extern unsigned long sparc64_kern_pri_context;  extern unsigned long sparc64_kern_pri_nuc_bits;  extern unsigned long sparc64_kern_sec_context; -extern void mmu_info(struct seq_file *m); +void mmu_info(struct seq_file *m);  struct linux_prom_translation {  	unsigned long virt; @@ -36,7 +36,7 @@ extern unsigned int prom_trans_ents;  /* Exported for SMP bootup purposes. */  extern unsigned long kern_locked_tte_data; -extern void prom_world(int enter); +void prom_world(int enter);  #ifdef CONFIG_SPARSEMEM_VMEMMAP  #define VMEMMAP_CHUNK_SHIFT	22 diff --git a/arch/sparc/mm/io-unit.c b/arch/sparc/mm/io-unit.c index eb99862e9654..f311bf219016 100644 --- a/arch/sparc/mm/io-unit.c +++ b/arch/sparc/mm/io-unit.c @@ -25,6 +25,8 @@  #include <asm/dma.h>  #include <asm/oplib.h> +#include "mm_32.h" +  /* #define IOUNIT_DEBUG */  #ifdef IOUNIT_DEBUG  #define IOD(x) printk(x) @@ -38,7 +40,8 @@  static void __init iounit_iommu_init(struct platform_device *op)  {  	struct iounit_struct *iounit; -	iopte_t *xpt, *xptend; +	iopte_t __iomem *xpt; +	iopte_t __iomem *xptend;  	iounit = kzalloc(sizeof(struct iounit_struct), GFP_ATOMIC);  	if (!iounit) { @@ -62,10 +65,10 @@ static void __init iounit_iommu_init(struct platform_device *op)  	op->dev.archdata.iommu = iounit;  	iounit->page_table = xpt;  	spin_lock_init(&iounit->lock); -	 -	for (xptend = iounit->page_table + (16 * PAGE_SIZE) / sizeof(iopte_t); -	     xpt < xptend;) -	     	iopte_val(*xpt++) = 0; + +	xptend = iounit->page_table + (16 * PAGE_SIZE) / sizeof(iopte_t); +	for (; xpt < xptend; xpt++) +		sbus_writel(0, xpt);  }  static int __init iounit_init(void) @@ -130,7 +133,7 @@ nexti:	scan = find_next_zero_bit(iounit->bmap, limit, scan);  	vaddr = IOUNIT_DMA_BASE + (scan << PAGE_SHIFT) + (vaddr & ~PAGE_MASK);  	for (k = 0; k < npages; k++, iopte = __iopte(iopte_val(iopte) + 0x100), scan++) {  		set_bit(scan, iounit->bmap); -		iounit->page_table[scan] = iopte; +		sbus_writel(iopte, &iounit->page_table[scan]);  	}  	IOD(("%08lx\n", vaddr));  	return vaddr; @@ -202,7 +205,7 @@ static int iounit_map_dma_area(struct device *dev, dma_addr_t *pba, unsigned lon  	struct iounit_struct *iounit = dev->archdata.iommu;  	unsigned long page, end;  	pgprot_t dvma_prot; -	iopte_t *iopte; +	iopte_t __iomem *iopte;  	*pba = addr; @@ -224,8 +227,8 @@ static int iounit_map_dma_area(struct device *dev, dma_addr_t *pba, unsigned lon  			i = ((addr - IOUNIT_DMA_BASE) >> PAGE_SHIFT); -			iopte = (iopte_t *)(iounit->page_table + i); -			*iopte = MKIOPTE(__pa(page)); +			iopte = iounit->page_table + i; +			sbus_writel(MKIOPTE(__pa(page)), iopte);  		}  		addr += PAGE_SIZE;  		va += PAGE_SIZE; diff --git a/arch/sparc/mm/iommu.c b/arch/sparc/mm/iommu.c index 28f96f27c768..491511d37e37 100644 --- a/arch/sparc/mm/iommu.c +++ b/arch/sparc/mm/iommu.c @@ -27,6 +27,8 @@  #include <asm/iommu.h>  #include <asm/dma.h> +#include "mm_32.h" +  /*   * This can be sized dynamically, but we will do this   * only when we have a guidance about actual I/O pressures. @@ -37,9 +39,6 @@  #define IOMMU_NPTES	(IOMMU_WINSIZE/PAGE_SIZE)	/* 64K PTEs, 256KB */  #define IOMMU_ORDER	6				/* 4096 * (1<<6) */ -/* srmmu.c */ -extern int viking_mxcc_present; -extern int flush_page_for_dma_global;  static int viking_flush;  /* viking.S */  extern void viking_flush_page(unsigned long page); @@ -59,6 +58,8 @@ static void __init sbus_iommu_init(struct platform_device *op)  	struct iommu_struct *iommu;  	unsigned int impl, vers;  	unsigned long *bitmap; +	unsigned long control; +	unsigned long base;  	unsigned long tmp;  	iommu = kmalloc(sizeof(struct iommu_struct), GFP_KERNEL); @@ -73,12 +74,14 @@ static void __init sbus_iommu_init(struct platform_device *op)  		prom_printf("Cannot map IOMMU registers\n");  		prom_halt();  	} -	impl = (iommu->regs->control & IOMMU_CTRL_IMPL) >> 28; -	vers = (iommu->regs->control & IOMMU_CTRL_VERS) >> 24; -	tmp = iommu->regs->control; -	tmp &= ~(IOMMU_CTRL_RNGE); -	tmp |= (IOMMU_RNGE_256MB | IOMMU_CTRL_ENAB); -	iommu->regs->control = tmp; + +	control = sbus_readl(&iommu->regs->control); +	impl = (control & IOMMU_CTRL_IMPL) >> 28; +	vers = (control & IOMMU_CTRL_VERS) >> 24; +	control &= ~(IOMMU_CTRL_RNGE); +	control |= (IOMMU_RNGE_256MB | IOMMU_CTRL_ENAB); +	sbus_writel(control, &iommu->regs->control); +  	iommu_invalidate(iommu->regs);  	iommu->start = IOMMU_START;  	iommu->end = 0xffffffff; @@ -100,7 +103,9 @@ static void __init sbus_iommu_init(struct platform_device *op)  	memset(iommu->page_table, 0, IOMMU_NPTES*sizeof(iopte_t));  	flush_cache_all();  	flush_tlb_all(); -	iommu->regs->base = __pa((unsigned long) iommu->page_table) >> 4; + +	base = __pa((unsigned long)iommu->page_table) >> 4; +	sbus_writel(base, &iommu->regs->base);  	iommu_invalidate(iommu->regs);  	bitmap = kmalloc(IOMMU_NPTES>>3, GFP_KERNEL); diff --git a/arch/sparc/mm/leon_mm.c b/arch/sparc/mm/leon_mm.c index 5bed085a2c17..3b17b6f7895a 100644 --- a/arch/sparc/mm/leon_mm.c +++ b/arch/sparc/mm/leon_mm.c @@ -15,10 +15,10 @@  #include <asm/leon.h>  #include <asm/tlbflush.h> -#include "srmmu.h" +#include "mm_32.h"  int leon_flush_during_switch = 1; -int srmmu_swprobe_trace; +static int srmmu_swprobe_trace;  static inline unsigned long leon_get_ctable_ptr(void)  { diff --git a/arch/sparc/mm/mm_32.h b/arch/sparc/mm/mm_32.h new file mode 100644 index 000000000000..a6c27ca9a721 --- /dev/null +++ b/arch/sparc/mm/mm_32.h @@ -0,0 +1,24 @@ +/* fault_32.c - visible as they are called from assembler */ +asmlinkage int lookup_fault(unsigned long pc, unsigned long ret_pc, +                            unsigned long address); +asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write, +                               unsigned long address); + +void window_overflow_fault(void); +void window_underflow_fault(unsigned long sp); +void window_ret_fault(struct pt_regs *regs); + +/* srmmu.c */ +extern char *srmmu_name; +extern int viking_mxcc_present; +extern int flush_page_for_dma_global; + +extern void (*poke_srmmu)(void); + +void __init srmmu_paging_init(void); + +/* iommu.c */ +void ld_mmu_iommu(void); + +/* io-unit.c */ +void ld_mmu_iounit(void); diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c index cfbe53c17b0d..be65f035d18a 100644 --- a/arch/sparc/mm/srmmu.c +++ b/arch/sparc/mm/srmmu.c @@ -49,7 +49,7 @@  #include <asm/mxcc.h>  #include <asm/ross.h> -#include "srmmu.h" +#include "mm_32.h"  enum mbus_module srmmu_modtype;  static unsigned int hwbug_bitmask; @@ -100,7 +100,6 @@ static unsigned long srmmu_nocache_end;  #define SRMMU_NOCACHE_ALIGN_MAX (sizeof(ctxd_t)*SRMMU_MAX_CONTEXTS)  void *srmmu_nocache_pool; -void *srmmu_nocache_bitmap;  static struct bit_map srmmu_nocache_map;  static inline int srmmu_pmd_none(pmd_t pmd) @@ -173,7 +172,7 @@ static void *__srmmu_get_nocache(int size, int align)  		printk(KERN_ERR "srmmu: out of nocache %d: %d/%d\n",  		       size, (int) srmmu_nocache_size,  		       srmmu_nocache_map.used << SRMMU_NOCACHE_BITMAP_SHIFT); -		return 0; +		return NULL;  	}  	addr = SRMMU_NOCACHE_VADDR + (offset << SRMMU_NOCACHE_BITMAP_SHIFT); @@ -269,6 +268,7 @@ static void __init srmmu_nocache_calcsize(void)  static void __init srmmu_nocache_init(void)  { +	void *srmmu_nocache_bitmap;  	unsigned int bitmap_bits;  	pgd_t *pgd;  	pmd_t *pmd; @@ -728,7 +728,7 @@ static inline unsigned long srmmu_probe(unsigned long vaddr)  				     "=r" (retval) :  				     "r" (vaddr | 0x400), "i" (ASI_M_FLUSH_PROBE));  	} else { -		retval = leon_swprobe(vaddr, 0); +		retval = leon_swprobe(vaddr, NULL);  	}  	return retval;  } @@ -865,8 +865,6 @@ static void __init map_kernel(void)  void (*poke_srmmu)(void) = NULL; -extern unsigned long bootmem_init(unsigned long *pages_avail); -  void __init srmmu_paging_init(void)  {  	int i; @@ -1771,9 +1769,6 @@ static struct sparc32_cachetlb_ops smp_cachetlb_ops = {  /* Load up routines and constants for sun4m and sun4d mmu */  void __init load_mmu(void)  { -	extern void ld_mmu_iommu(void); -	extern void ld_mmu_iounit(void); -  	/* Functions */  	get_srmmu_type(); diff --git a/arch/sparc/mm/srmmu.h b/arch/sparc/mm/srmmu.h deleted file mode 100644 index 5703274ccf89..000000000000 --- a/arch/sparc/mm/srmmu.h +++ /dev/null @@ -1,4 +0,0 @@ -/* srmmu.c */ -extern char *srmmu_name; - -extern void (*poke_srmmu)(void); diff --git a/arch/sparc/mm/tsb.c b/arch/sparc/mm/tsb.c index fe19b81acc09..a06576683c38 100644 --- a/arch/sparc/mm/tsb.c +++ b/arch/sparc/mm/tsb.c @@ -9,6 +9,7 @@  #include <asm/page.h>  #include <asm/pgtable.h>  #include <asm/mmu_context.h> +#include <asm/setup.h>  #include <asm/tsb.h>  #include <asm/tlb.h>  #include <asm/oplib.h> | 
