public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
To: Ingo Molnar <mingo@elte.hu>, linux-kernel@vger.kernel.org
Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Subject: [RFC patch 24/27] Immediate Values Use Arch NMI and MCE Support
Date: Wed, 16 Apr 2008 17:34:50 -0400	[thread overview]
Message-ID: <20080416213557.075597889@polymtl.ca> (raw)
In-Reply-To: 20080416213426.298498397@polymtl.ca

[-- Attachment #1: immediate-values-use-arch-nmi-mce-support.patch --]
[-- Type: text/plain, Size: 4216 bytes --]

Remove the architecture agnostic code now replaced by architecture specific,
atomic instruction updates.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
 include/linux/immediate.h |   11 ------
 kernel/immediate.c        |   73 +---------------------------------------------
 2 files changed, 3 insertions(+), 81 deletions(-)

Index: linux-2.6-lttng/kernel/immediate.c
===================================================================
--- linux-2.6-lttng.orig/kernel/immediate.c	2008-04-11 09:41:33.000000000 -0400
+++ linux-2.6-lttng/kernel/immediate.c	2008-04-14 18:48:05.000000000 -0400
@@ -19,92 +19,23 @@
 #include <linux/mutex.h>
 #include <linux/immediate.h>
 #include <linux/memory.h>
-#include <linux/cpu.h>
-#include <linux/stop_machine.h>
 
 #include <asm/sections.h>
-#include <asm/cacheflush.h>
 
 /*
  * Kernel ready to execute the SMP update that may depend on trap and ipi.
  */
 static int imv_early_boot_complete;
-static int wrote_text;
 
 extern struct __imv __start___imv[];
 extern struct __imv __stop___imv[];
 
-static int stop_machine_imv_update(void *imv_ptr)
-{
-	struct __imv *imv = imv_ptr;
-
-	if (!wrote_text) {
-		text_poke((void *)imv->imv, (void *)imv->var, imv->size);
-		wrote_text = 1;
-		smp_wmb(); /* make sure other cpus see that this has run */
-	} else
-		sync_core();
-
-	flush_icache_range(imv->imv, imv->imv + imv->size);
-
-	return 0;
-}
-
 /*
  * imv_mutex nests inside module_mutex. imv_mutex protects builtin
  * immediates and module immediates.
  */
 static DEFINE_MUTEX(imv_mutex);
 
-
-/**
- * apply_imv_update - update one immediate value
- * @imv: pointer of type const struct __imv to update
- *
- * Update one immediate value. Must be called with imv_mutex held.
- * It makes sure all CPUs are not executing the modified code by having them
- * busy looping with interrupts disabled.
- * It does _not_ protect against NMI and MCE (could be a problem with Intel's
- * errata if we use immediate values in their code path).
- */
-static int apply_imv_update(const struct __imv *imv)
-{
-	/*
-	 * If the variable and the instruction have the same value, there is
-	 * nothing to do.
-	 */
-	switch (imv->size) {
-	case 1:	if (*(uint8_t *)imv->imv
-				== *(uint8_t *)imv->var)
-			return 0;
-		break;
-	case 2:	if (*(uint16_t *)imv->imv
-				== *(uint16_t *)imv->var)
-			return 0;
-		break;
-	case 4:	if (*(uint32_t *)imv->imv
-				== *(uint32_t *)imv->var)
-			return 0;
-		break;
-	case 8:	if (*(uint64_t *)imv->imv
-				== *(uint64_t *)imv->var)
-			return 0;
-		break;
-	default:return -EINVAL;
-	}
-
-	if (imv_early_boot_complete) {
-		kernel_text_lock();
-		wrote_text = 0;
-		stop_machine_run(stop_machine_imv_update, (void *)imv,
-					ALL_CPUS);
-		kernel_text_unlock();
-	} else
-		text_poke_early((void *)imv->imv, (void *)imv->var,
-				imv->size);
-	return 0;
-}
-
 /**
  * imv_update_range - Update immediate values in a range
  * @begin: pointer to the beginning of the range
@@ -121,7 +52,9 @@ void imv_update_range(const struct __imv
 		mutex_lock(&imv_mutex);
 		if (!iter->imv)	/* Skip removed __init immediate values */
 			goto skip;
-		ret = apply_imv_update(iter);
+		kernel_text_lock();
+		ret = arch_imv_update(iter, !imv_early_boot_complete);
+		kernel_text_unlock();
 		if (imv_early_boot_complete && ret)
 			printk(KERN_WARNING
 				"Invalid immediate value. "
Index: linux-2.6-lttng/include/linux/immediate.h
===================================================================
--- linux-2.6-lttng.orig/include/linux/immediate.h	2008-04-11 09:36:58.000000000 -0400
+++ linux-2.6-lttng/include/linux/immediate.h	2008-04-14 18:46:47.000000000 -0400
@@ -12,17 +12,6 @@
 
 #ifdef CONFIG_IMMEDIATE
 
-struct __imv {
-	unsigned long var;	/* Pointer to the identifier variable of the
-				 * immediate value
-				 */
-	unsigned long imv;	/*
-				 * Pointer to the memory location of the
-				 * immediate value within the instruction.
-				 */
-	unsigned char size;	/* Type size. */
-} __attribute__ ((packed));
-
 #include <asm/immediate.h>
 
 /**

-- 
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68

  parent reply	other threads:[~2008-04-16 21:36 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-16 21:34 [RFC patch 00/27] Jump-based NMI-safe immediate values and markers for sched-devel.git Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 01/27] From: Adrian Bunk <bunk@kernel.org> Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 02/27] x86 NMI-safe INT3 and Page Fault Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 03/27] Check for breakpoint in text_poke to eliminate bug_on Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 04/27] Kprobes - use a mutex to protect the instruction pages list Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 05/27] Kprobes - do not use kprobes mutex in arch code Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 06/27] Kprobes - declare kprobe_mutex static Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 07/27] Text Edit Lock - Architecture Independent Code Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 08/27] Text Edit Lock - kprobes architecture independent support Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 09/27] Add all cpus option to stop machine run Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 10/27] Immediate Values - Architecture Independent Code Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 11/27] Immediate Values - Kconfig menu in EMBEDDED Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 12/27] Immediate Values - x86 Optimization Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 13/27] Add text_poke and sync_core to powerpc Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 14/27] Immediate Values - Powerpc Optimization Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 15/27] Immediate Values - Documentation Mathieu Desnoyers
2008-04-17  9:52   ` KOSAKI Motohiro
2008-04-17 10:36     ` Adrian Bunk
2008-04-17 12:56       ` Mathieu Desnoyers
2008-04-17 12:17     ` [RFC patch 15/27] Immediate Values - Documentation (updated) Mathieu Desnoyers
2008-04-18  2:27       ` KOSAKI Motohiro
2008-04-16 21:34 ` [RFC patch 16/27] Immediate Values Support init Mathieu Desnoyers
2008-04-19 11:04   ` KOSAKI Motohiro
2008-04-19 13:24     ` Mathieu Desnoyers
2008-04-19 14:06       ` KOSAKI Motohiro
2008-04-16 21:34 ` [RFC patch 17/27] Scheduler Profiling - Use Immediate Values Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 18/27] Markers - remove extra format argument Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 19/27] Markers - define non optimized marker Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 20/27] Immediate Values - Move Kprobes x86 restore_interrupt to kdebug.h Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 21/27] Add __discard section to x86 Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 22/27] Immediate Values - x86 Optimization NMI and MCE support Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 23/27] Immediate Values - Powerpc Optimization NMI " Mathieu Desnoyers
2008-04-16 23:09   ` Paul Mackerras
2008-04-16 23:33     ` Mathieu Desnoyers
2008-04-17  0:35       ` Paul Mackerras
2008-04-17  1:24         ` Mathieu Desnoyers
2008-04-19 23:40           ` Paul E. McKenney
2008-04-16 21:34 ` Mathieu Desnoyers [this message]
2008-04-16 21:34 ` [RFC patch 25/27] Linux Kernel Markers - Use Immediate Values Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 26/27] Immediate Values - Jump Mathieu Desnoyers
2008-04-19 11:41   ` KOSAKI Motohiro
2008-04-19 13:25     ` Mathieu Desnoyers
2008-04-16 21:34 ` [RFC patch 27/27] Markers use imv jump Mathieu Desnoyers

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=20080416213557.075597889@polymtl.ca \
    --to=mathieu.desnoyers@polymtl.ca \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox