virtio-mem: support VIRTIO_MEM_F_UNPLUGGED_INACCESSIBLE
The initial virtio-mem spec states that while unplugged memory should not be read, the device still has to allow for reading unplugged memory inside the usable region. The primary motivation for this default handling was to simplify bringup of virtio-mem, because there were corner cases where Linux might have accidentially read unplugged memory inside added Linux memory blocks. In the meantime, we: 1. Removed /dev/kmem in commitbbcd53c960
("drivers/char: remove /dev/kmem for good") 2. Disallowed access to virtio-mem device memory via /dev/mem in commit2128f4e21a
("virtio-mem: disallow mapping virtio-mem memory via /dev/mem") 3. Sanitized access to virtio-mem device memory via /proc/kcore in commit0daa322b8f
("fs/proc/kcore: don't read offline sections, logically offline pages and hwpoisoned pages") 4. Sanitized access to virtio-mem device memory via /proc/vmcore in commitce2814622e
("virtio-mem: kdump mode to sanitize /proc/vmcore access") "Accidential" access to unplugged memory is no longer possible; we can support the new VIRTIO_MEM_F_UNPLUGGED_INACCESSIBLE feature that will be required by some hypervisors implementing virtio-mem in the near future. Acked-by: Michael S. Tsirkin <mst@redhat.com> Cc: "Michael S. Tsirkin" <mst@redhat.com> Cc: Jason Wang <jasowang@redhat.com> Cc: Marek Kedzierski <mkedzier@redhat.com> Cc: Hui Zhu <teawater@gmail.com> Cc: Sebastien Boeuf <sebastien.boeuf@intel.com> Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> Cc: Wei Yang <richard.weiyang@linux.alibaba.com> Signed-off-by: David Hildenbrand <david@redhat.com>
This commit is contained in:
parent
cb690f5238
commit
61082ad6a6
|
@ -2889,6 +2889,7 @@ static unsigned int virtio_mem_features[] = {
|
||||||
#if defined(CONFIG_NUMA) && defined(CONFIG_ACPI_NUMA)
|
#if defined(CONFIG_NUMA) && defined(CONFIG_ACPI_NUMA)
|
||||||
VIRTIO_MEM_F_ACPI_PXM,
|
VIRTIO_MEM_F_ACPI_PXM,
|
||||||
#endif
|
#endif
|
||||||
|
VIRTIO_MEM_F_UNPLUGGED_INACCESSIBLE,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct virtio_device_id virtio_mem_id_table[] = {
|
static const struct virtio_device_id virtio_mem_id_table[] = {
|
||||||
|
|
|
@ -68,9 +68,10 @@
|
||||||
* explicitly triggered (VIRTIO_MEM_REQ_UNPLUG).
|
* explicitly triggered (VIRTIO_MEM_REQ_UNPLUG).
|
||||||
*
|
*
|
||||||
* There are no guarantees what will happen if unplugged memory is
|
* There are no guarantees what will happen if unplugged memory is
|
||||||
* read/written. Such memory should, in general, not be touched. E.g.,
|
* read/written. In general, unplugged memory should not be touched, because
|
||||||
* even writing might succeed, but the values will simply be discarded at
|
* the resulting action is undefined. There is one exception: without
|
||||||
* random points in time.
|
* VIRTIO_MEM_F_UNPLUGGED_INACCESSIBLE, unplugged memory inside the usable
|
||||||
|
* region can be read, to simplify creation of memory dumps.
|
||||||
*
|
*
|
||||||
* It can happen that the device cannot process a request, because it is
|
* It can happen that the device cannot process a request, because it is
|
||||||
* busy. The device driver has to retry later.
|
* busy. The device driver has to retry later.
|
||||||
|
@ -87,6 +88,8 @@
|
||||||
|
|
||||||
/* node_id is an ACPI PXM and is valid */
|
/* node_id is an ACPI PXM and is valid */
|
||||||
#define VIRTIO_MEM_F_ACPI_PXM 0
|
#define VIRTIO_MEM_F_ACPI_PXM 0
|
||||||
|
/* unplugged memory must not be accessed */
|
||||||
|
#define VIRTIO_MEM_F_UNPLUGGED_INACCESSIBLE 1
|
||||||
|
|
||||||
|
|
||||||
/* --- virtio-mem: guest -> host requests --- */
|
/* --- virtio-mem: guest -> host requests --- */
|
||||||
|
|
Loading…
Reference in New Issue