mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-19 13:44:03 +00:00
virtio: allow to unbreak virtqueue
This patch allows the new introduced __virtio_break_device() to unbreak the virtqueue. Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: "Paul E. McKenney" <paulmck@kernel.org> Cc: Marc Zyngier <maz@kernel.org> Cc: Halil Pasic <pasic@linux.ibm.com> Cc: Cornelia Huck <cohuck@redhat.com> Cc: Vineeth Vijayan <vneethv@linux.ibm.com> Cc: Peter Oberparleiter <oberpar@linux.ibm.com> Cc: linux-s390@vger.kernel.org Signed-off-by: Jason Wang <jasowang@redhat.com> Message-Id: <20220527060120.20964-8-jasowang@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
This commit is contained in:
parent
3a232277c1
commit
be83f04d25
2 changed files with 23 additions and 0 deletions
|
@ -2395,6 +2395,28 @@ void virtio_break_device(struct virtio_device *dev)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(virtio_break_device);
|
EXPORT_SYMBOL_GPL(virtio_break_device);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This should allow the device to be used by the driver. You may
|
||||||
|
* need to grab appropriate locks to flush the write to
|
||||||
|
* vq->broken. This should only be used in some specific case e.g
|
||||||
|
* (probing and restoring). This function should only be called by the
|
||||||
|
* core, not directly by the driver.
|
||||||
|
*/
|
||||||
|
void __virtio_unbreak_device(struct virtio_device *dev)
|
||||||
|
{
|
||||||
|
struct virtqueue *_vq;
|
||||||
|
|
||||||
|
spin_lock(&dev->vqs_list_lock);
|
||||||
|
list_for_each_entry(_vq, &dev->vqs, list) {
|
||||||
|
struct vring_virtqueue *vq = to_vvq(_vq);
|
||||||
|
|
||||||
|
/* Pairs with READ_ONCE() in virtqueue_is_broken(). */
|
||||||
|
WRITE_ONCE(vq->broken, false);
|
||||||
|
}
|
||||||
|
spin_unlock(&dev->vqs_list_lock);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(__virtio_unbreak_device);
|
||||||
|
|
||||||
dma_addr_t virtqueue_get_desc_addr(struct virtqueue *_vq)
|
dma_addr_t virtqueue_get_desc_addr(struct virtqueue *_vq)
|
||||||
{
|
{
|
||||||
struct vring_virtqueue *vq = to_vvq(_vq);
|
struct vring_virtqueue *vq = to_vvq(_vq);
|
||||||
|
|
|
@ -131,6 +131,7 @@ void unregister_virtio_device(struct virtio_device *dev);
|
||||||
bool is_virtio_device(struct device *dev);
|
bool is_virtio_device(struct device *dev);
|
||||||
|
|
||||||
void virtio_break_device(struct virtio_device *dev);
|
void virtio_break_device(struct virtio_device *dev);
|
||||||
|
void __virtio_unbreak_device(struct virtio_device *dev);
|
||||||
|
|
||||||
void virtio_config_changed(struct virtio_device *dev);
|
void virtio_config_changed(struct virtio_device *dev);
|
||||||
#ifdef CONFIG_PM_SLEEP
|
#ifdef CONFIG_PM_SLEEP
|
||||||
|
|
Loading…
Add table
Reference in a new issue