Patchwork [3.5.yuz,extended,stable] Patch "xen/bootup: allow {read|write}_cr8 pvops call." has been added to staging queue

mail settings
Submitter Herton Ronaldo Krzesinski
Date Nov. 15, 2012, 5:50 a.m.
Message ID <>
Download mbox | patch
Permalink /patch/199183/
State New
Headers show


Herton Ronaldo Krzesinski - Nov. 15, 2012, 5:50 a.m.
This is a note to let you know that I have just added a patch titled

    xen/bootup: allow {read|write}_cr8 pvops call.

to the linux-3.5.y-queue branch of the 3.5.yuz extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.yuz tree, see



From 78de8ab75b5ec09736563fdb5907ee35dd5d4b80 Mon Sep 17 00:00:00 2001
From: Konrad Rzeszutek Wilk <>
Date: Wed, 10 Oct 2012 13:25:48 -0400
Subject: [PATCH] xen/bootup: allow {read|write}_cr8 pvops call.

commit 1a7bbda5b1ab0e02622761305a32dc38735b90b2 upstream.

We actually do not do anything about it. Just return a default
value of zero and if the kernel tries to write anything but 0
we BUG_ON.

This fixes the case when an user tries to suspend the machine
and it blows up in save_processor_state b/c 'read_cr8' is set
to NULL and we get:

kernel BUG at /home/konrad/ssd/linux/arch/x86/include/asm/paravirt.h:100!
invalid opcode: 0000 [#1] SMP
Pid: 2687, comm: init.late Tainted: G           O 3.6.0upstream-00002-gac264ac-dirty #4 Bochs Bochs
RIP: e030:[<ffffffff814d5f42>]  [<ffffffff814d5f42>] save_processor_state+0x212/0x270

.. snip..
Call Trace:
 [<ffffffff810733bf>] do_suspend_lowlevel+0xf/0xac
 [<ffffffff8107330c>] ? x86_acpi_suspend_lowlevel+0x10c/0x150
 [<ffffffff81342ee2>] acpi_suspend_enter+0x57/0xd5

Signed-off-by: Konrad Rzeszutek Wilk <>
Signed-off-by: Herton Ronaldo Krzesinski <>
 arch/x86/xen/enlighten.c |   16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)



diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 93dcfdc..c1656e0 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -952,7 +952,16 @@  static void xen_write_cr4(unsigned long cr4)

+#ifdef CONFIG_X86_64
+static inline unsigned long xen_read_cr8(void)
+	return 0;
+static inline void xen_write_cr8(unsigned long val)
+	BUG_ON(val);
 static int xen_write_msr_safe(unsigned int msr, unsigned low, unsigned high)
 	int ret;
@@ -1121,6 +1130,11 @@  static const struct pv_cpu_ops xen_cpu_ops __initconst = {
 	.read_cr4_safe = native_read_cr4_safe,
 	.write_cr4 = xen_write_cr4,

+#ifdef CONFIG_X86_64
+	.read_cr8 = xen_read_cr8,
+	.write_cr8 = xen_write_cr8,
 	.wbinvd = native_wbinvd,

 	.read_msr = native_read_msr_safe,