linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sasha Levin <Alexander.Levin@microsoft.com>
To: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"stable@vger.kernel.org" <stable@vger.kernel.org>
Cc: "Nikita Leshenko" <nikita.leshchenko@oracle.com>,
	"Konrad Rzeszutek Wilk" <konrad.wilk@oracle.com>,
	"Radim Krčmář" <rkrcmar@redhat.com>,
	"Sasha Levin" <Alexander.Levin@microsoft.com>
Subject: [PATCH AUTOSEL for 4.4 05/35] KVM: x86: ioapic: Clear Remote IRR when entry is switched to edge-triggered
Date: Wed, 24 Jan 2018 04:16:54 +0000	[thread overview]
Message-ID: <20180124041645.32420-5-alexander.levin@microsoft.com> (raw)
In-Reply-To: <20180124041645.32420-1-alexander.levin@microsoft.com>

From: Nikita Leshenko <nikita.leshchenko@oracle.com>

[ Upstream commit a8bfec2930525808c01f038825d1df3904638631 ]

Some OSes (Linux, Xen) use this behavior to clear the Remote IRR bit for
IOAPICs without an EOI register. They simulate the EOI message manually
by changing the trigger mode to edge and then back to level, with the
entry being masked during this.

QEMU implements this feature in commit ed1263c363c9
("ioapic: clear remote irr bit for edge-triggered interrupts")

As a side effect, this commit removes an incorrect behavior where Remote
IRR was cleared when the redirection table entry was rewritten. This is not
consistent with the manual and also opens an opportunity for a strange
behavior when a redirection table entry is modified from an interrupt
handler that handles the same entry: The modification will clear the
Remote IRR bit even though the interrupt handler is still running.

Signed-off-by: Nikita Leshenko <nikita.leshchenko@oracle.com>
Reviewed-by: Liran Alon <liran.alon@oracle.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Wanpeng Li <wanpeng.li@hotmail.com>
Reviewed-by: Steve Rutherford <srutherford@google.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/ioapic.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kvm/ioapic.c b/arch/x86/kvm/ioapic.c
index 96ee7091becf..403dd464965c 100644
--- a/arch/x86/kvm/ioapic.c
+++ b/arch/x86/kvm/ioapic.c
@@ -296,8 +296,17 @@ static void ioapic_write_indirect(struct kvm_ioapic *ioapic, u32 val)
 		} else {
 			e->bits &= ~0xffffffffULL;
 			e->bits |= (u32) val;
-			e->fields.remote_irr = 0;
 		}
+
+		/*
+		 * Some OSes (Linux, Xen) assume that Remote IRR bit will
+		 * be cleared by IOAPIC hardware when the entry is configured
+		 * as edge-triggered. This behavior is used to simulate an
+		 * explicit EOI on IOAPICs that don't have the EOI register.
+		 */
+		if (e->fields.trig_mode == IOAPIC_EDGE_TRIG)
+			e->fields.remote_irr = 0;
+
 		mask_after = e->fields.mask;
 		if (mask_before != mask_after)
 			kvm_fire_mask_notifiers(ioapic->kvm, KVM_IRQCHIP_IOAPIC, index, mask_after);
-- 
2.11.0

  parent reply	other threads:[~2018-01-24  4:32 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-24  4:16 [PATCH AUTOSEL for 4.4 01/35] KVM: x86: emulator: Return to user-mode on L1 CPL=0 emulation failure Sasha Levin
2018-01-24  4:16 ` [PATCH AUTOSEL for 4.4 02/35] KVM: x86: Don't re-execute instruction when not passing CR2 value Sasha Levin
2018-01-24  4:16 ` [PATCH AUTOSEL for 4.4 04/35] KVM: x86: ioapic: Fix level-triggered EOI and IOAPIC reconfigure race Sasha Levin
2018-01-24  4:16 ` [PATCH AUTOSEL for 4.4 03/35] KVM: X86: Fix operand/address-size during instruction decoding Sasha Levin
2018-01-24  4:16 ` Sasha Levin [this message]
2018-01-24  4:16 ` [PATCH AUTOSEL for 4.4 06/35] KVM: x86: ioapic: Preserve read-only values in the redirection table Sasha Levin
2018-01-24  4:16 ` [PATCH AUTOSEL for 4.4 07/35] ACPI / bus: Leave modalias empty for devices which are not present Sasha Levin
2018-01-24  4:16 ` [PATCH AUTOSEL for 4.4 08/35] cpufreq: Add Loongson machine dependencies Sasha Levin
2018-01-24  4:16 ` [PATCH AUTOSEL for 4.4 10/35] drm/amdgpu: Fix SDMA load/unload sequence on HWS disabled mode Sasha Levin
2018-01-24  4:16 ` [PATCH AUTOSEL for 4.4 09/35] bcache: check return value of register_shrinker Sasha Levin
2018-01-24  4:16 ` [PATCH AUTOSEL for 4.4 11/35] drm/amdkfd: Fix SDMA ring buffer size calculation Sasha Levin
2018-01-24  4:16 ` [PATCH AUTOSEL for 4.4 12/35] drm/amdkfd: Fix SDMA oversubsription handling Sasha Levin
2018-01-24  4:16 ` [PATCH AUTOSEL for 4.4 13/35] openvswitch: fix the incorrect flow action alloc size Sasha Levin
2018-01-24  4:16 ` [PATCH AUTOSEL for 4.4 14/35] mac80211: fix the update of path metric for RANN frame Sasha Levin
2018-01-24  4:16 ` [PATCH AUTOSEL for 4.4 15/35] btrfs: fix deadlock when writing out space cache Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 16/35] KVM: VMX: Fix rflags cache during vCPU reset Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 18/35] nfsd: CLOSE SHOULD return the invalid special stateid for NFSv4.x (x>0) Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 17/35] xen-netfront: remove warning when unloading module Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 20/35] nfsd: Ensure we check stateid validity in the seqid operation checks Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 19/35] nfsd: Ensure we don't recognise lock stateids after freeing them Sasha Levin
2018-01-24 15:48   ` J. Bruce Fields
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 21/35] grace: replace BUG_ON by WARN_ONCE in exit_net hook Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 22/35] nfsd: check for use of the closed special stateid Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 23/35] lockd: fix "list_add double add" caused by legacy signal interface Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 24/35] hwmon: (pmbus) Use 64bit math for DIRECT format values Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 25/35] net: ethernet: xilinx: Mark XILINX_LL_TEMAC broken on 64-bit Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 27/35] SUNRPC: Allow connect to return EHOSTUNREACH Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 26/35] quota: Check for register_shrinker() failure Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 29/35] drm/omap: Fix error handling path in 'omap_dmm_probe()' Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 28/35] kmemleak: add scheduling point to kmemleak_scan() Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 30/35] xfs: ubsan fixes Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 31/35] scsi: aacraid: Prevent crash in case of free interrupt during scsi EH path Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 32/35] scsi: ufs: ufshcd: fix potential NULL pointer dereference in ufshcd_config_vreg Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 33/35] media: usbtv: add a new usbid Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 34/35] usb: gadget: don't dereference g until after it has been null checked Sasha Levin
2018-01-24  4:17 ` [PATCH AUTOSEL for 4.4 35/35] staging: rtl8188eu: Fix incorrect response to SIOCGIWESSID Sasha Levin

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=20180124041645.32420-5-alexander.levin@microsoft.com \
    --to=alexander.levin@microsoft.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nikita.leshchenko@oracle.com \
    --cc=rkrcmar@redhat.com \
    --cc=stable@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).