lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20211105034949.1397997-1-npiggin@gmail.com>
Date:   Fri,  5 Nov 2021 13:49:49 +1000
From:   Nicholas Piggin <npiggin@...il.com>
To:     Paolo Bonzini <pbonzini@...hat.com>
Cc:     Nicholas Piggin <npiggin@...il.com>, kvm@...r.kernel.org,
        linux-kernel@...r.kernel.org
Subject: [PATCH] KVM: move struct kvm_vcpu * array to the bottom of struct kvm

Increasing the max VCPUs on powerpc makes the kvm_arch member offset
great enough that some assembly breaks due to addressing constants
overflowing field widths.

Moving the vcpus array to the end of struct kvm prevents this from
happening. It has the side benefit that moving the large array out
from the middle of the structure should help keep other commonly
accessed fields in the same or adjacent cache lines.

Signed-off-by: Nicholas Piggin <npiggin@...il.com>
---

It would next be possible to now make this a dynamically sized array,
and make the KVM_MAX_VCPUS more dynamic, however x86 kvm_svm uses its
own scheme rather than kvm_arch for some reason.

Thanks,
Nick

 include/linux/kvm_host.h | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index 0f18df7fe874..78cd9b63a6a5 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -553,7 +553,6 @@ struct kvm {
 	struct mutex slots_arch_lock;
 	struct mm_struct *mm; /* userspace tied to this vm */
 	struct kvm_memslots __rcu *memslots[KVM_ADDRESS_SPACE_NUM];
-	struct kvm_vcpu *vcpus[KVM_MAX_VCPUS];
 
 	/* Used to wait for completion of MMU notifiers.  */
 	spinlock_t mn_invalidate_lock;
@@ -623,6 +622,9 @@ struct kvm {
 	struct notifier_block pm_notifier;
 #endif
 	char stats_id[KVM_STATS_NAME_SIZE];
+
+	/* This array can be very large, so keep it at the bottom */
+	struct kvm_vcpu *vcpus[KVM_MAX_VCPUS];
 };
 
 #define kvm_err(fmt, ...) \
-- 
2.23.0

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ