KVM: Do not restrict the size of KVM-internal memory regions
Exempt KVM-internal memslots from the KVM_MEM_MAX_NR_PAGES restriction, as the limit on the number of pages exists purely to play nice with dirty bitmap operations, which use 32-bit values to index the bitmaps, and dirty logging isn't supported for KVM-internal memslots. Link: https://lore.kernel.org/all/20240802205003.353672-6-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com> Reviewed-by: Christoph Schlameuss <schlameuss@linux.ibm.com> Reviewed-by: David Hildenbrand <david@redhat.com> Link: https://lore.kernel.org/r/20250123144627.312456-2-imbrenda@linux.ibm.com Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> Message-ID: <20250123144627.312456-2-imbrenda@linux.ibm.com>
This commit is contained in:
parent
4514eda4c1
commit
66119f8ce1
1 changed files with 9 additions and 1 deletions
|
@ -1971,7 +1971,15 @@ static int kvm_set_memory_region(struct kvm *kvm,
|
|||
return -EINVAL;
|
||||
if (mem->guest_phys_addr + mem->memory_size < mem->guest_phys_addr)
|
||||
return -EINVAL;
|
||||
if ((mem->memory_size >> PAGE_SHIFT) > KVM_MEM_MAX_NR_PAGES)
|
||||
|
||||
/*
|
||||
* The size of userspace-defined memory regions is restricted in order
|
||||
* to play nice with dirty bitmap operations, which are indexed with an
|
||||
* "unsigned int". KVM's internal memory regions don't support dirty
|
||||
* logging, and so are exempt.
|
||||
*/
|
||||
if (id < KVM_USER_MEM_SLOTS &&
|
||||
(mem->memory_size >> PAGE_SHIFT) > KVM_MEM_MAX_NR_PAGES)
|
||||
return -EINVAL;
|
||||
|
||||
slots = __kvm_memslots(kvm, as_id);
|
||||
|
|
Loading…
Add table
Reference in a new issue