From: Christoph Hellwig <hch@lst.de>
To: davidm@mostang.com, ak@suse.de
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH][RFC] fixing the irqwcpustat mess
Date: Mon, 5 May 2003 21:25:46 +0200 [thread overview]
Message-ID: <20030505212546.A24006@lst.de> (raw)
currently only x86_64 and ia64 don't use the generic irq_cpustat code
and both have to workaround it's brokenness for the non-default case.
x86_64 defines an empty irq_cpustat_t even if it doesn't need one and
ia64 adds CONFIG_IA64 ifdefs around all users. What about this patch
instead to make __ARCH_IRQ_STAT useable?
--- 1.11/include/asm-ia64/hardirq.h Wed Feb 5 06:03:22 2003
+++ edited/include/asm-ia64/hardirq.h Tue Apr 22 22:03:09 2003
@@ -16,6 +16,9 @@
/*
* No irq_cpustat_t for IA-64. The data is held in the per-CPU data structure.
*/
+
+#define __ARCH_IRQ_STAT 1
+
#define softirq_pending(cpu) (cpu_data(cpu)->softirq_pending)
#define syscall_count(cpu) /* unused on IA-64 */
#define ksoftirqd_task(cpu) (cpu_data(cpu)->ksoftirqd)
--- 1.3/include/asm-x86_64/hardirq.h Tue Nov 12 18:13:39 2002
+++ edited/include/asm-x86_64/hardirq.h Tue Apr 22 22:03:10 2003
@@ -12,10 +12,6 @@
special access macros. This would generate better code. */
#define __IRQ_STAT(cpu,member) (read_pda(me)->member)
-typedef struct {
- /* Empty. All the fields have moved to the PDA. */
-} irq_cpustat_t;
-
#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
/*
--- 1.7/include/linux/irq_cpustat.h Mon Mar 31 18:21:49 2003
+++ edited/include/linux/irq_cpustat.h Tue Apr 22 22:03:10 2003
@@ -17,9 +17,8 @@
* definitions instead of differing sets for each arch.
*/
-extern irq_cpustat_t irq_stat[]; /* defined in asm/hardirq.h */
-
-#ifndef __ARCH_IRQ_STAT /* Some architectures can do this more efficiently */
+#ifndef __ARCH_IRQ_STAT
+extern irq_cpustat_t irq_stat[]; /* defined in asm/hardirq.h */
#ifdef CONFIG_SMP
#define __IRQ_STAT(cpu, member) (irq_stat[cpu].member)
#else
@@ -31,8 +30,11 @@
#define softirq_pending(cpu) __IRQ_STAT((cpu), __softirq_pending)
#define local_softirq_pending() softirq_pending(smp_processor_id())
#define syscall_count(cpu) __IRQ_STAT((cpu), __syscall_count)
+#define local_syscall_count() syscall_count(smp_processor_id())
#define ksoftirqd_task(cpu) __IRQ_STAT((cpu), __ksoftirqd_task)
+#define local_ksoftirqd_task() ksoftirqd_task(smp_processor_id())
+
/* arch dependent irq_stat fields */
-#define nmi_count(cpu) __IRQ_STAT((cpu), __nmi_count) /* i386, ia64 */
+#define nmi_count(cpu) __IRQ_STAT((cpu), __nmi_count) /* i386 */
#endif /* __irq_cpustat_h */
--- 1.189/kernel/ksyms.c Sat Apr 12 18:37:08 2003
+++ edited/kernel/ksyms.c Tue Apr 22 22:03:10 2003
@@ -400,7 +400,6 @@
EXPORT_SYMBOL(del_timer);
EXPORT_SYMBOL(request_irq);
EXPORT_SYMBOL(free_irq);
-EXPORT_SYMBOL(irq_stat);
/* waitqueue handling */
EXPORT_SYMBOL(add_wait_queue);
--- 1.39/kernel/softirq.c Wed Apr 16 09:51:47 2003
+++ edited/kernel/softirq.c Tue Apr 22 22:03:10 2003
@@ -33,7 +33,10 @@
- Tasklets: serialized wrt itself.
*/
+#ifndef __ARCH_IRQ_STAT
irq_cpustat_t irq_stat[NR_CPUS] ____cacheline_aligned;
+EXPORT_SYMBOL(irq_stat);
+#endif
static struct softirq_action softirq_vec[32] __cacheline_aligned_in_smp;
@@ -321,7 +324,7 @@
__set_current_state(TASK_INTERRUPTIBLE);
mb();
- ksoftirqd_task(cpu) = current;
+ local_ksoftirqd_task() = current;
for (;;) {
if (!local_softirq_pending())
next reply other threads:[~2003-05-05 19:13 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-05-05 19:25 Christoph Hellwig [this message]
2003-05-05 21:37 ` [PATCH][RFC] fixing the irqwcpustat mess David Mosberger
2003-05-07 4:24 ` Andi Kleen
2003-05-07 4:30 ` David Mosberger-Tang
2003-05-07 4:49 ` Andi Kleen
2003-05-07 5:24 ` Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20030505212546.A24006@lst.de \
--to=hch@lst.de \
--cc=ak@suse.de \
--cc=davidm@mostang.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.