Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7ce78fd authored by David S. Miller's avatar David S. Miller
Browse files

[SPARC64]: Eliminate irq_cpustat_t.



We can put the __softirq_pending mask in the cpudata,
no need for the silly NR_CPUS array in kernel/softirq.c

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 826509f8
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -153,11 +153,14 @@ __handle_signal:
rtrap_irq:
rtrap_clr_l6:	clr			%l6
rtrap:
		ldub			[%g6 + TI_CPU], %l0
		sethi			%hi(irq_stat), %l2	! &softirq_active
		or			%l2, %lo(irq_stat), %l2	! &softirq_active
irqsz_patchme:	sllx			%l0, 0, %l0
		lduw			[%l2 + %l0], %l1	! softirq_pending
#ifndef CONFIG_SMP
		sethi			%hi(per_cpu____cpu_data), %l0
		lduw			[%l0 + %lo(per_cpu____cpu_data)], %l1
#else
		sethi			%hi(per_cpu____cpu_data), %l0
		or			%l0, %lo(per_cpu____cpu_data), %l0
		lduw			[%l0 + %g5], %l1
#endif
		cmp			%l1, 0

		/* mm/ultra.S:xcall_report_regs KNOWS about this load. */
+0 −12
Original line number Diff line number Diff line
@@ -511,18 +511,6 @@ void __init setup_arch(char **cmdline_p)
	conswitchp = &prom_con;
#endif

#ifdef CONFIG_SMP
	i = (unsigned long)&irq_stat[1] - (unsigned long)&irq_stat[0];
	if ((i == SMP_CACHE_BYTES) || (i == (2 * SMP_CACHE_BYTES))) {
		extern unsigned int irqsz_patchme[1];
		irqsz_patchme[0] |= ((i == SMP_CACHE_BYTES) ? SMP_CACHE_BYTES_SHIFT : \
							SMP_CACHE_BYTES_SHIFT + 1);
		flushi((long)&irqsz_patchme[0]);
	} else {
		prom_printf("Unexpected size of irq_stat[] elements\n");
		prom_halt();
	}
#endif
	/* Work out if we are starfire early on */
	check_if_starfire();

+2 −2
Original line number Diff line number Diff line
/* cpudata.h: Per-cpu parameters.
 *
 * Copyright (C) 2003 David S. Miller (davem@redhat.com)
 * Copyright (C) 2003, 2005 David S. Miller (davem@redhat.com)
 */

#ifndef _SPARC64_CPUDATA_H
@@ -10,7 +10,7 @@

typedef struct {
	/* Dcache line 1 */
	unsigned int	__pad0;		/* bh_count moved to irq_stat for consistency. KAO */
	unsigned int	__softirq_pending; /* must be 1st, see rtrap.S */
	unsigned int	multiplier;
	unsigned int	counter;
	unsigned int	idle_volume;
+5 −11
Original line number Diff line number Diff line
/* hardirq.h: 64-bit Sparc hard IRQ support.
 *
 * Copyright (C) 1997, 1998 David S. Miller (davem@caip.rutgers.edu)
 * Copyright (C) 1997, 1998, 2005 David S. Miller (davem@davemloft.net)
 */

#ifndef __SPARC64_HARDIRQ_H
#define __SPARC64_HARDIRQ_H

#include <linux/config.h>
#include <linux/threads.h>
#include <linux/spinlock.h>
#include <linux/cache.h>
#include <asm/cpudata.h>

/* rtrap.S is sensitive to the offsets of these fields */
typedef struct {
	unsigned int __softirq_pending;
} ____cacheline_aligned irq_cpustat_t;

#include <linux/irq_cpustat.h>	/* Standard mappings for irq_cpustat_t above */
#define __ARCH_IRQ_STAT
#define local_softirq_pending() \
	(local_cpu_data().__softirq_pending)

#define HARDIRQ_BITS	8