[kernel/f15/master] apply gcc-4.6.0 sparc build fix patch

Dennis Gilmore ausil at fedoraproject.org
Thu Mar 10 00:45:31 UTC 2011


commit f5bdb227c49e9fae70f89a4e22d4b45d836aa22f
Author: Dennis Gilmore <dennis at ausil.us>
Date:   Wed Mar 9 18:45:06 2011 -0600

    apply gcc-4.6.0 sparc build fix patch

 kernel.spec                                |    5 +
 sparc64_fix_build_errors_with_gcc460.patch |  305 ++++++++++++++++++++++++++++
 2 files changed, 310 insertions(+), 0 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index 2a5c22c..4683fbc 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -620,6 +620,7 @@ Patch31: linux-2.6-utrace.patch
 Patch32: linux-2.6-utrace-ptrace.patch
 
 Patch150: linux-2.6.29-sparc-IOC_TYPECHECK.patch
+Patch151: sparc64_fix_build_errors_with_gcc460.patch
 
 Patch160: linux-2.6-32bit-mmap-exec-randomization.patch
 Patch161: linux-2.6-i386-nx-emulation.patch
@@ -1192,6 +1193,7 @@ ApplyPatch linux-2.6-utrace-ptrace.patch
 # SPARC64
 #
 ApplyPatch linux-2.6.29-sparc-IOC_TYPECHECK.patch
+ApplyPatch sparc64_fix_build_errors_with_gcc460.patch
 
 #
 # Exec shield
@@ -1970,6 +1972,9 @@ fi
 # and build.
 
 %changelog
+* Wed Mar 09 2011 Dennis Gilmore <dennis at ausil.us> 
+- apply sparc64 gcc-4.6.0 buildfix patch
+
 * Wed Mar 09 2011 Ben Skeggs <bskeggs at redhat.com> 2.6.38-0.rc8.git0.2
 - nouveau: allow max clients on nv4x (679629), better error reporting
 
diff --git a/sparc64_fix_build_errors_with_gcc460.patch b/sparc64_fix_build_errors_with_gcc460.patch
new file mode 100644
index 0000000..807032c
--- /dev/null
+++ b/sparc64_fix_build_errors_with_gcc460.patch
@@ -0,0 +1,305 @@
+From dbb988cf34a62e69c8863f212be212c6841004ba Mon Sep 17 00:00:00 2001
+From: David S. Miller <davem at davemloft.net>
+Date: Sat, 26 Feb 2011 23:40:02 -0800
+Subject: [PATCH] sparc64: Fix build errors with gcc-4.6.0
+
+Most of the warnings emitted (we fail arch/sparc file
+builds with -Werror) were legitimate but harmless, however
+one case (n2_pcr_write) was a genuine bug.
+
+Based almost entirely upon a patch by Sam Ravnborg.
+
+Reported-by: Dennis Gilmore <dennis at ausil.us>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+---
+ arch/sparc/kernel/iommu.c      |    3 ---
+ arch/sparc/kernel/ldc.c        |   28 ++++++++++++++++++----------
+ arch/sparc/kernel/pci.c        |    1 +
+ arch/sparc/kernel/pci_common.c |   11 +++++++----
+ arch/sparc/kernel/pci_fire.c   |    2 --
+ arch/sparc/kernel/pci_schizo.c |    4 +---
+ arch/sparc/kernel/pci_sun4v.c  |    3 +--
+ arch/sparc/kernel/pcr.c        |    2 +-
+ arch/sparc/kernel/ptrace_64.c  |    3 ++-
+ arch/sparc/kernel/smp_64.c     |   11 ++++-------
+ arch/sparc/kernel/traps_64.c   |    3 +--
+ 11 files changed, 36 insertions(+), 35 deletions(-)
+
+diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c
+index 72509d0..6f01e8c 100644
+--- a/arch/sparc/kernel/iommu.c
++++ b/arch/sparc/kernel/iommu.c
+@@ -333,13 +333,10 @@ static void dma_4u_free_coherent(struct device *dev, size_t size,
+ 				 void *cpu, dma_addr_t dvma)
+ {
+ 	struct iommu *iommu;
+-	iopte_t *iopte;
+ 	unsigned long flags, order, npages;
+ 
+ 	npages = IO_PAGE_ALIGN(size) >> IO_PAGE_SHIFT;
+ 	iommu = dev->archdata.iommu;
+-	iopte = iommu->page_table +
+-		((dvma - iommu->page_table_map_base) >> IO_PAGE_SHIFT);
+ 
+ 	spin_lock_irqsave(&iommu->lock, flags);
+ 
+diff --git a/arch/sparc/kernel/ldc.c b/arch/sparc/kernel/ldc.c
+index df39a0f..732b0bc 100644
+--- a/arch/sparc/kernel/ldc.c
++++ b/arch/sparc/kernel/ldc.c
+@@ -790,16 +790,20 @@ static void send_events(struct ldc_channel *lp, unsigned int event_mask)
+ static irqreturn_t ldc_rx(int irq, void *dev_id)
+ {
+ 	struct ldc_channel *lp = dev_id;
+-	unsigned long orig_state, hv_err, flags;
++	unsigned long orig_state, flags;
+ 	unsigned int event_mask;
+ 
+ 	spin_lock_irqsave(&lp->lock, flags);
+ 
+ 	orig_state = lp->chan_state;
+-	hv_err = sun4v_ldc_rx_get_state(lp->id,
+-					&lp->rx_head,
+-					&lp->rx_tail,
+-					&lp->chan_state);
++
++	/* We should probably check for hypervisor errors here and
++	 * reset the LDC channel if we get one.
++	 */
++	sun4v_ldc_rx_get_state(lp->id,
++			       &lp->rx_head,
++			       &lp->rx_tail,
++			       &lp->chan_state);
+ 
+ 	ldcdbg(RX, "RX state[0x%02lx:0x%02lx] head[0x%04lx] tail[0x%04lx]\n",
+ 	       orig_state, lp->chan_state, lp->rx_head, lp->rx_tail);
+@@ -904,16 +908,20 @@ out:
+ static irqreturn_t ldc_tx(int irq, void *dev_id)
+ {
+ 	struct ldc_channel *lp = dev_id;
+-	unsigned long flags, hv_err, orig_state;
++	unsigned long flags, orig_state;
+ 	unsigned int event_mask = 0;
+ 
+ 	spin_lock_irqsave(&lp->lock, flags);
+ 
+ 	orig_state = lp->chan_state;
+-	hv_err = sun4v_ldc_tx_get_state(lp->id,
+-					&lp->tx_head,
+-					&lp->tx_tail,
+-					&lp->chan_state);
++
++	/* We should probably check for hypervisor errors here and
++	 * reset the LDC channel if we get one.
++	 */
++	sun4v_ldc_tx_get_state(lp->id,
++			       &lp->tx_head,
++			       &lp->tx_tail,
++			       &lp->chan_state);
+ 
+ 	ldcdbg(TX, " TX state[0x%02lx:0x%02lx] head[0x%04lx] tail[0x%04lx]\n",
+ 	       orig_state, lp->chan_state, lp->tx_head, lp->tx_tail);
+diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c
+index 4137579..f255382 100644
+--- a/arch/sparc/kernel/pci.c
++++ b/arch/sparc/kernel/pci.c
+@@ -675,6 +675,7 @@ static void __devinit pci_bus_register_of_sysfs(struct pci_bus *bus)
+ 		 * humanoid.
+ 		 */
+ 		err = sysfs_create_file(&dev->dev.kobj, &dev_attr_obppath.attr);
++		(void) err;
+ 	}
+ 	list_for_each_entry(child_bus, &bus->children, node)
+ 		pci_bus_register_of_sysfs(child_bus);
+diff --git a/arch/sparc/kernel/pci_common.c b/arch/sparc/kernel/pci_common.c
+index 6c7a33a..6e3874b 100644
+--- a/arch/sparc/kernel/pci_common.c
++++ b/arch/sparc/kernel/pci_common.c
+@@ -295,14 +295,17 @@ static int sun4v_write_pci_cfg(struct pci_bus *bus_dev, unsigned int devfn,
+ 	unsigned int bus = bus_dev->number;
+ 	unsigned int device = PCI_SLOT(devfn);
+ 	unsigned int func = PCI_FUNC(devfn);
+-	unsigned long ret;
+ 
+ 	if (config_out_of_range(pbm, bus, devfn, where)) {
+ 		/* Do nothing. */
+ 	} else {
+-		ret = pci_sun4v_config_put(devhandle,
+-				HV_PCI_DEVICE_BUILD(bus, device, func),
+-				where, size, value);
++		/* We don't check for hypervisor errors here, but perhaps
++		 * we should and influence our return value depending upon
++		 * what kind of error is thrown.
++		 */
++		pci_sun4v_config_put(devhandle,
++				     HV_PCI_DEVICE_BUILD(bus, device, func),
++				     where, size, value);
+ 	}
+ 	return PCIBIOS_SUCCESSFUL;
+ }
+diff --git a/arch/sparc/kernel/pci_fire.c b/arch/sparc/kernel/pci_fire.c
+index efb896d..75dfeb6 100644
+--- a/arch/sparc/kernel/pci_fire.c
++++ b/arch/sparc/kernel/pci_fire.c
+@@ -214,11 +214,9 @@ static int pci_fire_msi_setup(struct pci_pbm_info *pbm, unsigned long msiqid,
+ 
+ static int pci_fire_msi_teardown(struct pci_pbm_info *pbm, unsigned long msi)
+ {
+-	unsigned long msiqid;
+ 	u64 val;
+ 
+ 	val = upa_readq(pbm->pbm_regs + MSI_MAP(msi));
+-	msiqid = (val & MSI_MAP_EQNUM);
+ 
+ 	val &= ~MSI_MAP_VALID;
+ 
+diff --git a/arch/sparc/kernel/pci_schizo.c b/arch/sparc/kernel/pci_schizo.c
+index 445a47a..4620eb7 100644
+--- a/arch/sparc/kernel/pci_schizo.c
++++ b/arch/sparc/kernel/pci_schizo.c
+@@ -1313,7 +1313,7 @@ static int __devinit schizo_pbm_init(struct pci_pbm_info *pbm,
+ 	const struct linux_prom64_registers *regs;
+ 	struct device_node *dp = op->dev.of_node;
+ 	const char *chipset_name;
+-	int is_pbm_a, err;
++	int err;
+ 
+ 	switch (chip_type) {
+ 	case PBM_CHIP_TYPE_TOMATILLO:
+@@ -1343,8 +1343,6 @@ static int __devinit schizo_pbm_init(struct pci_pbm_info *pbm,
+ 	 */
+ 	regs = of_get_property(dp, "reg", NULL);
+ 
+-	is_pbm_a = ((regs[0].phys_addr & 0x00700000) == 0x00600000);
+-
+ 	pbm->next = pci_pbm_root;
+ 	pci_pbm_root = pbm;
+ 
+diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c
+index 743344a..859abfd 100644
+--- a/arch/sparc/kernel/pci_sun4v.c
++++ b/arch/sparc/kernel/pci_sun4v.c
+@@ -580,7 +580,7 @@ static int __devinit pci_sun4v_iommu_init(struct pci_pbm_info *pbm)
+ {
+ 	static const u32 vdma_default[] = { 0x80000000, 0x80000000 };
+ 	struct iommu *iommu = pbm->iommu;
+-	unsigned long num_tsb_entries, sz, tsbsize;
++	unsigned long num_tsb_entries, sz;
+ 	u32 dma_mask, dma_offset;
+ 	const u32 *vdma;
+ 
+@@ -596,7 +596,6 @@ static int __devinit pci_sun4v_iommu_init(struct pci_pbm_info *pbm)
+ 
+ 	dma_mask = (roundup_pow_of_two(vdma[1]) - 1UL);
+ 	num_tsb_entries = vdma[1] / IO_PAGE_SIZE;
+-	tsbsize = num_tsb_entries * sizeof(iopte_t);
+ 
+ 	dma_offset = vdma[0];
+ 
+diff --git a/arch/sparc/kernel/pcr.c b/arch/sparc/kernel/pcr.c
+index 7c2ced6..8ac23e6 100644
+--- a/arch/sparc/kernel/pcr.c
++++ b/arch/sparc/kernel/pcr.c
+@@ -81,7 +81,7 @@ static void n2_pcr_write(u64 val)
+ 	unsigned long ret;
+ 
+ 	ret = sun4v_niagara2_setperf(HV_N2_PERF_SPARC_CTL, val);
+-	if (val != HV_EOK)
++	if (ret != HV_EOK)
+ 		write_pcr(val);
+ }
+ 
+diff --git a/arch/sparc/kernel/ptrace_64.c b/arch/sparc/kernel/ptrace_64.c
+index 9ccc812..96ee50a 100644
+--- a/arch/sparc/kernel/ptrace_64.c
++++ b/arch/sparc/kernel/ptrace_64.c
+@@ -1086,6 +1086,7 @@ asmlinkage int syscall_trace_enter(struct pt_regs *regs)
+ 
+ asmlinkage void syscall_trace_leave(struct pt_regs *regs)
+ {
++#ifdef CONFIG_AUDITSYSCALL
+ 	if (unlikely(current->audit_context)) {
+ 		unsigned long tstate = regs->tstate;
+ 		int result = AUDITSC_SUCCESS;
+@@ -1095,7 +1096,7 @@ asmlinkage void syscall_trace_leave(struct pt_regs *regs)
+ 
+ 		audit_syscall_exit(result, regs->u_regs[UREG_I0]);
+ 	}
+-
++#endif
+ 	if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
+ 		trace_sys_exit(regs, regs->u_regs[UREG_G1]);
+ 
+diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c
+index 555a76d..3e94a8c 100644
+--- a/arch/sparc/kernel/smp_64.c
++++ b/arch/sparc/kernel/smp_64.c
+@@ -189,7 +189,7 @@ static inline long get_delta (long *rt, long *master)
+ void smp_synchronize_tick_client(void)
+ {
+ 	long i, delta, adj, adjust_latency = 0, done = 0;
+-	unsigned long flags, rt, master_time_stamp, bound;
++	unsigned long flags, rt, master_time_stamp;
+ #if DEBUG_TICK_SYNC
+ 	struct {
+ 		long rt;	/* roundtrip time */
+@@ -208,10 +208,8 @@ void smp_synchronize_tick_client(void)
+ 	{
+ 		for (i = 0; i < NUM_ROUNDS; i++) {
+ 			delta = get_delta(&rt, &master_time_stamp);
+-			if (delta == 0) {
++			if (delta == 0)
+ 				done = 1;	/* let's lock on to this... */
+-				bound = rt;
+-			}
+ 
+ 			if (!done) {
+ 				if (i > 0) {
+@@ -933,13 +931,12 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu)
+ void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
+ {
+ 	void *pg_addr;
+-	int this_cpu;
+ 	u64 data0;
+ 
+ 	if (tlb_type == hypervisor)
+ 		return;
+ 
+-	this_cpu = get_cpu();
++	preempt_disable();
+ 
+ #ifdef CONFIG_DEBUG_DCFLUSH
+ 	atomic_inc(&dcpage_flushes);
+@@ -964,7 +961,7 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
+ 	}
+ 	__local_flush_dcache_page(page);
+ 
+-	put_cpu();
++	preempt_enable();
+ }
+ 
+ void __irq_entry smp_new_mmu_context_version_client(int irq, struct pt_regs *regs)
+diff --git a/arch/sparc/kernel/traps_64.c b/arch/sparc/kernel/traps_64.c
+index 42ad2ba..9456472 100644
+--- a/arch/sparc/kernel/traps_64.c
++++ b/arch/sparc/kernel/traps_64.c
+@@ -2152,7 +2152,7 @@ static void user_instruction_dump(unsigned int __user *pc)
+ 
+ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
+ {
+-	unsigned long fp, thread_base, ksp;
++	unsigned long fp, ksp;
+ 	struct thread_info *tp;
+ 	int count = 0;
+ #ifdef CONFIG_FUNCTION_GRAPH_TRACER
+@@ -2173,7 +2173,6 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
+ 		flushw_all();
+ 
+ 	fp = ksp + STACK_BIAS;
+-	thread_base = (unsigned long) tp;
+ 
+ 	printk("Call Trace:\n");
+ 	do {
+-- 
+1.7.4.1
+


More information about the scm-commits mailing list