svn commit: r329601 - head/sys/dev/virtio
Bryan Venteicher
bryanv at FreeBSD.org
Mon Feb 19 19:28:26 UTC 2018
Author: bryanv
Date: Mon Feb 19 19:28:24 2018
New Revision: 329601
URL: https://svnweb.freebsd.org/changeset/base/329601
Log:
Add VirtIO bus config_generation method
VirtIO buses (PCI, MMIO) can provide a generation field so a driver
can ensure either a 64-bit or array read was stable.
MFC after: 2 weeks
Modified:
head/sys/dev/virtio/virtio.c
head/sys/dev/virtio/virtio.h
head/sys/dev/virtio/virtio_bus_if.m
Modified: head/sys/dev/virtio/virtio.c
==============================================================================
--- head/sys/dev/virtio/virtio.c Mon Feb 19 19:08:25 2018 (r329600)
+++ head/sys/dev/virtio/virtio.c Mon Feb 19 19:28:24 2018 (r329601)
@@ -240,6 +240,13 @@ virtio_reinit_complete(device_t dev)
VIRTIO_BUS_REINIT_COMPLETE(device_get_parent(dev));
}
+int
+virtio_config_generation(device_t dev)
+{
+
+ return (VIRTIO_BUS_CONFIG_GENERATION(device_get_parent(dev)));
+}
+
void
virtio_read_device_config(device_t dev, bus_size_t offset, void *dst, int len)
{
Modified: head/sys/dev/virtio/virtio.h
==============================================================================
--- head/sys/dev/virtio/virtio.h Mon Feb 19 19:08:25 2018 (r329600)
+++ head/sys/dev/virtio/virtio.h Mon Feb 19 19:28:24 2018 (r329601)
@@ -78,6 +78,7 @@ int virtio_alloc_virtqueues(device_t dev, int flags,
int virtio_setup_intr(device_t dev, enum intr_type type);
int virtio_with_feature(device_t dev, uint64_t feature);
void virtio_stop(device_t dev);
+int virtio_config_generation(device_t dev);
int virtio_reinit(device_t dev, uint64_t features);
void virtio_reinit_complete(device_t dev);
Modified: head/sys/dev/virtio/virtio_bus_if.m
==============================================================================
--- head/sys/dev/virtio/virtio_bus_if.m Mon Feb 19 19:08:25 2018 (r329600)
+++ head/sys/dev/virtio/virtio_bus_if.m Mon Feb 19 19:28:24 2018 (r329601)
@@ -34,6 +34,14 @@ HEADER {
struct vq_alloc_info;
};
+CODE {
+ static int
+ virtio_bus_default_config_generation(device_t dev)
+ {
+ return (0);
+ }
+};
+
METHOD uint64_t negotiate_features {
device_t dev;
uint64_t child_features;
@@ -73,6 +81,10 @@ METHOD void notify_vq {
device_t dev;
uint16_t queue;
};
+
+METHOD int config_generation {
+ device_t dev;
+} DEFAULT virtio_bus_default_config_generation;
METHOD void read_device_config {
device_t dev;
More information about the svn-src-all
mailing list