Message ID | 20240207204652.22954-3-ankita@nvidia.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | kvm: arm64: allow the VM to select DEVICE_* and NORMAL_NC for IO memory | expand |
On Thu, Feb 08, 2024 at 02:16:50AM +0530, ankita@nvidia.com wrote: > diff --git a/include/linux/mm.h b/include/linux/mm.h > index f5a97dec5169..884c068a79eb 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -391,6 +391,20 @@ extern unsigned int kobjsize(const void *objp); > # define VM_UFFD_MINOR VM_NONE > #endif /* CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */ > > +/* > + * This flag is used to connect VFIO to arch specific KVM code. It > + * indicates that the memory under this VMA is safe for use with any > + * non-cachable memory type inside KVM. Some VFIO devices, on some > + * platforms, are thought to be unsafe and can cause machine crashes if > + * KVM does not lock down the memory type. > + */ > +#ifdef CONFIG_64BIT > +#define VM_VFIO_ALLOW_WC_BIT 39 > +#define VM_VFIO_ALLOW_WC BIT(VM_VFIO_ALLOW_WC_BIT) > +#else > +#define VM_VFIO_ALLOW_WC VM_NONE > +#endif Adding David Hildenbrand to this thread as well since we briefly discussed potential alternatives (not sure we came to any conclusion).
On Thu, Feb 08, 2024 at 01:03:27PM +0000, Catalin Marinas wrote: > On Thu, Feb 08, 2024 at 02:16:50AM +0530, ankita@nvidia.com wrote: > > diff --git a/include/linux/mm.h b/include/linux/mm.h > > index f5a97dec5169..884c068a79eb 100644 > > --- a/include/linux/mm.h > > +++ b/include/linux/mm.h > > @@ -391,6 +391,20 @@ extern unsigned int kobjsize(const void *objp); > > # define VM_UFFD_MINOR VM_NONE > > #endif /* CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */ > > > > +/* > > + * This flag is used to connect VFIO to arch specific KVM code. It > > + * indicates that the memory under this VMA is safe for use with any > > + * non-cachable memory type inside KVM. Some VFIO devices, on some > > + * platforms, are thought to be unsafe and can cause machine crashes if > > + * KVM does not lock down the memory type. > > + */ > > +#ifdef CONFIG_64BIT > > +#define VM_VFIO_ALLOW_WC_BIT 39 > > +#define VM_VFIO_ALLOW_WC BIT(VM_VFIO_ALLOW_WC_BIT) > > +#else > > +#define VM_VFIO_ALLOW_WC VM_NONE > > +#endif > > Adding David Hildenbrand to this thread as well since we briefly > discussed potential alternatives (not sure we came to any conclusion). FWIW, with my mm hat on: Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> But I'm interested if David has an alternative. We don't have a shortage of bits here so I'm not sure it is worth much fuss. Jason
diff --git a/include/linux/mm.h b/include/linux/mm.h index f5a97dec5169..884c068a79eb 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -391,6 +391,20 @@ extern unsigned int kobjsize(const void *objp); # define VM_UFFD_MINOR VM_NONE #endif /* CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */ +/* + * This flag is used to connect VFIO to arch specific KVM code. It + * indicates that the memory under this VMA is safe for use with any + * non-cachable memory type inside KVM. Some VFIO devices, on some + * platforms, are thought to be unsafe and can cause machine crashes if + * KVM does not lock down the memory type. + */ +#ifdef CONFIG_64BIT +#define VM_VFIO_ALLOW_WC_BIT 39 +#define VM_VFIO_ALLOW_WC BIT(VM_VFIO_ALLOW_WC_BIT) +#else +#define VM_VFIO_ALLOW_WC VM_NONE +#endif + /* Bits set in the VMA until the stack is in its final location */ #define VM_STACK_INCOMPLETE_SETUP (VM_RAND_READ | VM_SEQ_READ | VM_STACK_EARLY)