]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commit
irqchip/gic-v3-its: Use the exact ITSList for VMOVP
authorZenghui Yu <yuzenghui@huawei.com>
Wed, 23 Oct 2019 03:46:26 +0000 (03:46 +0000)
committerStefan Bader <stefan.bader@canonical.com>
Tue, 12 Nov 2019 17:47:34 +0000 (18:47 +0100)
commit14f885aa249b30d4a5075ff891c5b1dd32d1b76e
tree96a16137fc781669ccc344bc6cacc826260b4ea9
parent3d35dd0af0400137649b3e3da6ac4ce8ce9b1299
irqchip/gic-v3-its: Use the exact ITSList for VMOVP

BugLink: https://bugs.launchpad.net/bugs/1852111
[ Upstream commit 8424312516e5d9baeeb0a95d0e4523579b7aa395 ]

On a system without Single VMOVP support (say GITS_TYPER.VMOVP == 0),
we will map vPEs only on ITSs that will actually control interrupts
for the given VM.  And when moving a vPE, the VMOVP command will be
issued only for those ITSs.

But when issuing VMOVPs we seemed fail to present the exact ITSList
to ITSs who are actually included in the synchronization operation.
The its_list_map we're currently using includes all ITSs in the system,
even though some of them don't have the corresponding vPE mapping at all.

Introduce get_its_list() to get the per-VM its_list_map, to indicate
which ITSs have vPE mappings for the given VM, and use this map as
the expected ITSList when building VMOVP. This is hopefully a performance
gain not to do some synchronization with those unsuspecting ITSs.
And initialize the whole command descriptor to zero at beginning, since
the seq_num and its_list should be RES0 when GITS_TYPER.VMOVP == 1.

Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/1571802386-2680-1-git-send-email-yuzenghui@huawei.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Connor Kuehl <connor.kuehl@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/irqchip/irq-gic-v3-its.c