Commit 959b4fdf authored by Jeremy Fitzhardinge's avatar Jeremy Fitzhardinge Committed by Andi Kleen
Browse files

[PATCH] i386: PARAVIRT: Allow boot-time disable of paravirt_ops patching



Add "noreplace-paravirt" to disable paravirt_ops patching.

Signed-off-by: default avatarJeremy Fitzhardinge <jeremy@xensource.com>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Andi Kleen <ak@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 752783c0
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -64,6 +64,7 @@ parameter is applicable:
	GENERIC_TIME The generic timeofday code is enabled.
	GENERIC_TIME The generic timeofday code is enabled.
	NFS	Appropriate NFS support is enabled.
	NFS	Appropriate NFS support is enabled.
	OSS	OSS sound support is enabled.
	OSS	OSS sound support is enabled.
	PV_OPS	A paravirtualized kernel
	PARIDE	The ParIDE subsystem is enabled.
	PARIDE	The ParIDE subsystem is enabled.
	PARISC	The PA-RISC architecture is enabled.
	PARISC	The PA-RISC architecture is enabled.
	PCI	PCI bus support is enabled.
	PCI	PCI bus support is enabled.
@@ -1164,6 +1165,8 @@ and is between 256 and 4096 characters. It is defined in the file


	nomce		[IA-32] Machine Check Exception
	nomce		[IA-32] Machine Check Exception


	noreplace-paravirt	[IA-32,PV_OPS] Don't patch paravirt_ops

	noreplace-smp	[IA-32,SMP] Don't replace SMP instructions
	noreplace-smp	[IA-32,SMP] Don't replace SMP instructions
			with UP alternatives
			with UP alternatives


+13 −0
Original line number Original line Diff line number Diff line
@@ -30,6 +30,16 @@ static int __init setup_noreplace_smp(char *str)
}
}
__setup("noreplace-smp", setup_noreplace_smp);
__setup("noreplace-smp", setup_noreplace_smp);


#ifdef CONFIG_PARAVIRT
static int noreplace_paravirt = 0;

static int __init setup_noreplace_paravirt(char *str)
{
	noreplace_paravirt = 1;
	return 1;
}
__setup("noreplace-paravirt", setup_noreplace_paravirt);
#endif


#define DPRINTK(fmt, args...) if (debug_alternative) \
#define DPRINTK(fmt, args...) if (debug_alternative) \
	printk(KERN_DEBUG fmt, args)
	printk(KERN_DEBUG fmt, args)
@@ -330,6 +340,9 @@ void apply_paravirt(struct paravirt_patch_site *start,
{
{
	struct paravirt_patch_site *p;
	struct paravirt_patch_site *p;


	if (noreplace_paravirt)
		return;

	for (p = start; p < end; p++) {
	for (p = start; p < end; p++) {
		unsigned int used;
		unsigned int used;