* [PATCH v2 0/2] Add Error Recovery support for Virtio PCI devices
@ 2024-11-27 6:57 Israel Rukshin
2024-11-27 6:57 ` [PATCH 1/2] virtio_pci: Add support for PCIe Function Level Reset Israel Rukshin
2024-11-27 6:57 ` [PATCH 2/2] virtio_blk: Add support for transport error recovery Israel Rukshin
0 siblings, 2 replies; 6+ messages in thread
From: Israel Rukshin @ 2024-11-27 6:57 UTC (permalink / raw)
To: Max Gurtovoy, Jason Gunthorpe, Parav Pandit, stefanha,
virtualization, mst, Linux-block
Cc: Nitzan Carmi, kvm, Israel Rukshin
This patch series introduces an initial PCI Error Recovery support for
Virtio PCI devices, focusing on Function Level Reset (FLR) recovery.
The implementation aligns with the existing PCI error recovery
framework,
which provides a mechanism for coordinating between affected device
drivers and PCI controllers during reset and recovery phases.
By integrating Virtio PCI devices into this framework, we enhance the
system's ability to handle and recover from PCI errors, particularly
those requiring FLR (this patch set). This capability was previously
unavailable for Virtio PCI devices post-probe, and its addition
significantly improves system reliability and resiliency.
The series consists of two main patches:
1. Virtio PCI: implement the necessary infrastructure and callbacks
in the virtio_pci driver to handle FLR events properly.
2. Virtio Block: Implement proper cleanup and recovery procedures upon
FLR events.
Changes from v1 to v2:
- Don't print warning with -EOPNOTSUPP error.
Israel Rukshin (2):
virtio_pci: Add support for PCIe Function Level Reset
virtio_blk: Add support for transport error recovery
drivers/block/virtio_blk.c | 28 ++++++++-
drivers/virtio/virtio.c | 94 ++++++++++++++++++++++--------
drivers/virtio/virtio_pci_common.c | 41 +++++++++++++
include/linux/virtio.h | 8 +++
4 files changed, 143 insertions(+), 28 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] virtio_pci: Add support for PCIe Function Level Reset
2024-11-27 6:57 [PATCH v2 0/2] Add Error Recovery support for Virtio PCI devices Israel Rukshin
@ 2024-11-27 6:57 ` Israel Rukshin
2024-11-27 6:57 ` [PATCH 2/2] virtio_blk: Add support for transport error recovery Israel Rukshin
1 sibling, 0 replies; 6+ messages in thread
From: Israel Rukshin @ 2024-11-27 6:57 UTC (permalink / raw)
To: Max Gurtovoy, Jason Gunthorpe, Parav Pandit, stefanha,
virtualization, mst, Linux-block
Cc: Nitzan Carmi, kvm, Israel Rukshin
Implement support for Function Level Reset (FLR) in virtio_pci devices.
This change adds reset_prepare and reset_done callbacks, allowing
drivers to properly handle FLR operations.
Without this patch, performing and recovering from an FLR is not possible
for virtio_pci devices. This implementation ensures proper FLR handling
and recovery for both physical and virtual functions.
The device reset can be triggered in case of error or manually via
sysfs:
echo 1 > /sys/bus/pci/devices/$PCI_ADDR/reset
Signed-off-by: Israel Rukshin <israelr@nvidia.com>
Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com>
---
drivers/virtio/virtio.c | 94 ++++++++++++++++++++++--------
drivers/virtio/virtio_pci_common.c | 41 +++++++++++++
include/linux/virtio.h | 8 +++
3 files changed, 118 insertions(+), 25 deletions(-)
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
index b9095751e43b..c1cc1157b380 100644
--- a/drivers/virtio/virtio.c
+++ b/drivers/virtio/virtio.c
@@ -527,29 +527,7 @@ void unregister_virtio_device(struct virtio_device *dev)
}
EXPORT_SYMBOL_GPL(unregister_virtio_device);
-#ifdef CONFIG_PM_SLEEP
-int virtio_device_freeze(struct virtio_device *dev)
-{
- struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
- int ret;
-
- virtio_config_core_disable(dev);
-
- dev->failed = dev->config->get_status(dev) & VIRTIO_CONFIG_S_FAILED;
-
- if (drv && drv->freeze) {
- ret = drv->freeze(dev);
- if (ret) {
- virtio_config_core_enable(dev);
- return ret;
- }
- }
-
- return 0;
-}
-EXPORT_SYMBOL_GPL(virtio_device_freeze);
-
-int virtio_device_restore(struct virtio_device *dev)
+static int virtio_device_restore_priv(struct virtio_device *dev, bool restore)
{
struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
int ret;
@@ -580,8 +558,14 @@ int virtio_device_restore(struct virtio_device *dev)
if (ret)
goto err;
- if (drv->restore) {
- ret = drv->restore(dev);
+ if (restore) {
+ if (drv->restore) {
+ ret = drv->restore(dev);
+ if (ret)
+ goto err;
+ }
+ } else {
+ ret = drv->reset_done(dev);
if (ret)
goto err;
}
@@ -598,9 +582,69 @@ int virtio_device_restore(struct virtio_device *dev)
virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED);
return ret;
}
+
+#ifdef CONFIG_PM_SLEEP
+int virtio_device_freeze(struct virtio_device *dev)
+{
+ struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
+ int ret;
+
+ virtio_config_core_disable(dev);
+
+ dev->failed = dev->config->get_status(dev) & VIRTIO_CONFIG_S_FAILED;
+
+ if (drv && drv->freeze) {
+ ret = drv->freeze(dev);
+ if (ret) {
+ virtio_config_core_enable(dev);
+ return ret;
+ }
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(virtio_device_freeze);
+
+int virtio_device_restore(struct virtio_device *dev)
+{
+ return virtio_device_restore_priv(dev, true);
+}
EXPORT_SYMBOL_GPL(virtio_device_restore);
#endif
+int virtio_device_reset_prepare(struct virtio_device *dev)
+{
+ struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
+ int ret;
+
+ if (!drv || !drv->reset_prepare)
+ return -EOPNOTSUPP;
+
+ virtio_config_core_disable(dev);
+
+ dev->failed = dev->config->get_status(dev) & VIRTIO_CONFIG_S_FAILED;
+
+ ret = drv->reset_prepare(dev);
+ if (ret) {
+ virtio_config_core_enable(dev);
+ return ret;
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(virtio_device_reset_prepare);
+
+int virtio_device_reset_done(struct virtio_device *dev)
+{
+ struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
+
+ if (!drv || !drv->reset_done)
+ return -EOPNOTSUPP;
+
+ return virtio_device_restore_priv(dev, false);
+}
+EXPORT_SYMBOL_GPL(virtio_device_reset_done);
+
static int virtio_init(void)
{
if (bus_register(&virtio_bus) != 0)
diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
index 88074451dd61..d6d79af44569 100644
--- a/drivers/virtio/virtio_pci_common.c
+++ b/drivers/virtio/virtio_pci_common.c
@@ -794,6 +794,46 @@ static int virtio_pci_sriov_configure(struct pci_dev *pci_dev, int num_vfs)
return num_vfs;
}
+static void virtio_pci_reset_prepare(struct pci_dev *pci_dev)
+{
+ struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev);
+ int ret = 0;
+
+ ret = virtio_device_reset_prepare(&vp_dev->vdev);
+ if (ret) {
+ if (ret != -EOPNOTSUPP)
+ dev_warn(&pci_dev->dev, "Reset prepare failure: %d",
+ ret);
+ return;
+ }
+
+ if (pci_is_enabled(pci_dev))
+ pci_disable_device(pci_dev);
+}
+
+static void virtio_pci_reset_done(struct pci_dev *pci_dev)
+{
+ struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev);
+ int ret;
+
+ if (pci_is_enabled(pci_dev))
+ return;
+
+ ret = pci_enable_device(pci_dev);
+ if (!ret) {
+ pci_set_master(pci_dev);
+ ret = virtio_device_reset_done(&vp_dev->vdev);
+ }
+
+ if (ret && ret != -EOPNOTSUPP)
+ dev_warn(&pci_dev->dev, "Reset done failure: %d", ret);
+}
+
+static const struct pci_error_handlers virtio_pci_err_handler = {
+ .reset_prepare = virtio_pci_reset_prepare,
+ .reset_done = virtio_pci_reset_done,
+};
+
static struct pci_driver virtio_pci_driver = {
.name = "virtio-pci",
.id_table = virtio_pci_id_table,
@@ -803,6 +843,7 @@ static struct pci_driver virtio_pci_driver = {
.driver.pm = &virtio_pci_pm_ops,
#endif
.sriov_configure = virtio_pci_sriov_configure,
+ .err_handler = &virtio_pci_err_handler,
};
struct virtio_device *virtio_pci_vf_get_pf_dev(struct pci_dev *pdev)
diff --git a/include/linux/virtio.h b/include/linux/virtio.h
index 338e0f5efb4b..9cb0a427b7d5 100644
--- a/include/linux/virtio.h
+++ b/include/linux/virtio.h
@@ -187,6 +187,8 @@ int virtio_device_freeze(struct virtio_device *dev);
int virtio_device_restore(struct virtio_device *dev);
#endif
void virtio_reset_device(struct virtio_device *dev);
+int virtio_device_reset_prepare(struct virtio_device *dev);
+int virtio_device_reset_done(struct virtio_device *dev);
size_t virtio_max_dma_size(const struct virtio_device *vdev);
@@ -211,6 +213,10 @@ size_t virtio_max_dma_size(const struct virtio_device *vdev);
* changes; may be called in interrupt context.
* @freeze: optional function to call during suspend/hibernation.
* @restore: optional function to call on resume.
+ * @reset_prepare: optional function to call when a transport specific reset
+ * occurs.
+ * @reset_done: optional function to call after transport specific reset
+ * operation has finished.
*/
struct virtio_driver {
struct device_driver driver;
@@ -226,6 +232,8 @@ struct virtio_driver {
void (*config_changed)(struct virtio_device *dev);
int (*freeze)(struct virtio_device *dev);
int (*restore)(struct virtio_device *dev);
+ int (*reset_prepare)(struct virtio_device *dev);
+ int (*reset_done)(struct virtio_device *dev);
};
#define drv_to_virtio(__drv) container_of_const(__drv, struct virtio_driver, driver)
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 2/2] virtio_blk: Add support for transport error recovery
2024-11-27 6:57 [PATCH v2 0/2] Add Error Recovery support for Virtio PCI devices Israel Rukshin
2024-11-27 6:57 ` [PATCH 1/2] virtio_pci: Add support for PCIe Function Level Reset Israel Rukshin
@ 2024-11-27 6:57 ` Israel Rukshin
2025-01-30 15:48 ` Stefan Hajnoczi
1 sibling, 1 reply; 6+ messages in thread
From: Israel Rukshin @ 2024-11-27 6:57 UTC (permalink / raw)
To: Max Gurtovoy, Jason Gunthorpe, Parav Pandit, stefanha,
virtualization, mst, Linux-block
Cc: Nitzan Carmi, kvm, Israel Rukshin
Add support for proper cleanup and re-initialization of virtio-blk devices
during transport reset error recovery flow.
This enhancement includes:
- Pre-reset handler (reset_prepare) to perform device-specific cleanup
- Post-reset handler (reset_done) to re-initialize the device
These changes allow the device to recover from various reset scenarios,
ensuring proper functionality after a reset event occurs.
Without this implementation, the device cannot properly recover from
resets, potentially leading to undefined behavior or device malfunction.
This feature has been tested using PCI transport with Function Level
Reset (FLR) as an example reset mechanism. The reset can be triggered
manually via sysfs (echo 1 > /sys/bus/pci/devices/$PCI_ADDR/reset).
Signed-off-by: Israel Rukshin <israelr@nvidia.com>
Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com>
---
drivers/block/virtio_blk.c | 28 +++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index c0cdba71f436..e1ab97251275 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -1582,8 +1582,7 @@ static void virtblk_remove(struct virtio_device *vdev)
put_disk(vblk->disk);
}
-#ifdef CONFIG_PM_SLEEP
-static int virtblk_freeze(struct virtio_device *vdev)
+static int virtblk_freeze_priv(struct virtio_device *vdev)
{
struct virtio_blk *vblk = vdev->priv;
@@ -1602,7 +1601,7 @@ static int virtblk_freeze(struct virtio_device *vdev)
return 0;
}
-static int virtblk_restore(struct virtio_device *vdev)
+static int virtblk_restore_priv(struct virtio_device *vdev)
{
struct virtio_blk *vblk = vdev->priv;
int ret;
@@ -1616,8 +1615,29 @@ static int virtblk_restore(struct virtio_device *vdev)
blk_mq_unfreeze_queue(vblk->disk->queue);
return 0;
}
+
+#ifdef CONFIG_PM_SLEEP
+static int virtblk_freeze(struct virtio_device *vdev)
+{
+ return virtblk_freeze_priv(vdev);
+}
+
+static int virtblk_restore(struct virtio_device *vdev)
+{
+ return virtblk_restore_priv(vdev);
+}
#endif
+static int virtblk_reset_prepare(struct virtio_device *vdev)
+{
+ return virtblk_freeze_priv(vdev);
+}
+
+static int virtblk_reset_done(struct virtio_device *vdev)
+{
+ return virtblk_restore_priv(vdev);
+}
+
static const struct virtio_device_id id_table[] = {
{ VIRTIO_ID_BLOCK, VIRTIO_DEV_ANY_ID },
{ 0 },
@@ -1653,6 +1673,8 @@ static struct virtio_driver virtio_blk = {
.freeze = virtblk_freeze,
.restore = virtblk_restore,
#endif
+ .reset_prepare = virtblk_reset_prepare,
+ .reset_done = virtblk_reset_done,
};
static int __init virtio_blk_init(void)
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH 2/2] virtio_blk: Add support for transport error recovery
2024-11-27 6:57 ` [PATCH 2/2] virtio_blk: Add support for transport error recovery Israel Rukshin
@ 2025-01-30 15:48 ` Stefan Hajnoczi
2025-01-30 15:57 ` Michael S. Tsirkin
0 siblings, 1 reply; 6+ messages in thread
From: Stefan Hajnoczi @ 2025-01-30 15:48 UTC (permalink / raw)
To: Israel Rukshin
Cc: Max Gurtovoy, Jason Gunthorpe, Parav Pandit, virtualization, mst,
Linux-block, Nitzan Carmi, kvm
[-- Attachment #1: Type: text/plain, Size: 1153 bytes --]
On Wed, Nov 27, 2024 at 08:57:32AM +0200, Israel Rukshin wrote:
> Add support for proper cleanup and re-initialization of virtio-blk devices
> during transport reset error recovery flow.
> This enhancement includes:
> - Pre-reset handler (reset_prepare) to perform device-specific cleanup
> - Post-reset handler (reset_done) to re-initialize the device
>
> These changes allow the device to recover from various reset scenarios,
> ensuring proper functionality after a reset event occurs.
> Without this implementation, the device cannot properly recover from
> resets, potentially leading to undefined behavior or device malfunction.
>
> This feature has been tested using PCI transport with Function Level
> Reset (FLR) as an example reset mechanism. The reset can be triggered
> manually via sysfs (echo 1 > /sys/bus/pci/devices/$PCI_ADDR/reset).
>
> Signed-off-by: Israel Rukshin <israelr@nvidia.com>
> Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com>
> ---
> drivers/block/virtio_blk.c | 28 +++++++++++++++++++++++++---
> 1 file changed, 25 insertions(+), 3 deletions(-)
Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] virtio_blk: Add support for transport error recovery
2025-01-30 15:48 ` Stefan Hajnoczi
@ 2025-01-30 15:57 ` Michael S. Tsirkin
0 siblings, 0 replies; 6+ messages in thread
From: Michael S. Tsirkin @ 2025-01-30 15:57 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: Israel Rukshin, Max Gurtovoy, Jason Gunthorpe, Parav Pandit,
virtualization, Linux-block, Nitzan Carmi, kvm
On Thu, Jan 30, 2025 at 10:48:37AM -0500, Stefan Hajnoczi wrote:
> On Wed, Nov 27, 2024 at 08:57:32AM +0200, Israel Rukshin wrote:
> > Add support for proper cleanup and re-initialization of virtio-blk devices
> > during transport reset error recovery flow.
> > This enhancement includes:
> > - Pre-reset handler (reset_prepare) to perform device-specific cleanup
> > - Post-reset handler (reset_done) to re-initialize the device
> >
> > These changes allow the device to recover from various reset scenarios,
> > ensuring proper functionality after a reset event occurs.
> > Without this implementation, the device cannot properly recover from
> > resets, potentially leading to undefined behavior or device malfunction.
> >
> > This feature has been tested using PCI transport with Function Level
> > Reset (FLR) as an example reset mechanism. The reset can be triggered
> > manually via sysfs (echo 1 > /sys/bus/pci/devices/$PCI_ADDR/reset).
> >
> > Signed-off-by: Israel Rukshin <israelr@nvidia.com>
> > Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com>
> > ---
> > drivers/block/virtio_blk.c | 28 +++++++++++++++++++++++++---
> > 1 file changed, 25 insertions(+), 3 deletions(-)
>
> Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
Sorry this is in Linus' tree, I can not attach your ack.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 0/2] Add Error Recovery support for Virtio PCI devices
@ 2024-11-07 15:16 Israel Rukshin
2024-11-07 15:17 ` [PATCH 2/2] virtio_blk: Add support for transport error recovery Israel Rukshin
0 siblings, 1 reply; 6+ messages in thread
From: Israel Rukshin @ 2024-11-07 15:16 UTC (permalink / raw)
To: Max Gurtovoy, Jason Gunthorpe, Parav Pandit, stefanha,
virtualization, mst, Linux-block
Cc: Nitzan Carmi, kvm, Israel Rukshin
This patch series introduces an initial PCI Error Recovery support for
Virtio PCI devices, focusing on Function Level Reset (FLR) recovery.
The implementation aligns with the existing PCI error recovery
framework,
which provides a mechanism for coordinating between affected device
drivers and PCI controllers during reset and recovery phases.
By integrating Virtio PCI devices into this framework, we enhance the
system's ability to handle and recover from PCI errors, particularly
those requiring FLR (this patch set). This capability was previously
unavailable for Virtio PCI devices post-probe, and its addition
significantly improves system reliability and resiliency.
The series consists of two main patches:
1. Virtio PCI: implement the necessary infrastructure and callbacks
in the virtio_pci driver to handle FLR events properly.
2. Virtio Block: Implement proper cleanup and recovery procedures upon
FLR events.
Israel Rukshin (2):
virtio_pci: Add support for PCIe Function Level Reset
virtio_blk: Add support for transport error recovery
drivers/block/virtio_blk.c | 28 ++++++++-
drivers/virtio/virtio.c | 94 ++++++++++++++++++++++--------
drivers/virtio/virtio_pci_common.c | 39 +++++++++++++
include/linux/virtio.h | 8 +++
4 files changed, 141 insertions(+), 28 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/2] virtio_blk: Add support for transport error recovery
2024-11-07 15:16 [PATCH 0/2] Add Error Recovery support for Virtio PCI devices Israel Rukshin
@ 2024-11-07 15:17 ` Israel Rukshin
0 siblings, 0 replies; 6+ messages in thread
From: Israel Rukshin @ 2024-11-07 15:17 UTC (permalink / raw)
To: Max Gurtovoy, Jason Gunthorpe, Parav Pandit, stefanha,
virtualization, mst, Linux-block
Cc: Nitzan Carmi, kvm, Israel Rukshin
Add support for proper cleanup and re-initialization of virtio-blk devices
during transport reset error recovery flow.
This enhancement includes:
- Pre-reset handler (reset_prepare) to perform device-specific cleanup
- Post-reset handler (reset_done) to re-initialize the device
These changes allow the device to recover from various reset scenarios,
ensuring proper functionality after a reset event occurs.
Without this implementation, the device cannot properly recover from
resets, potentially leading to undefined behavior or device malfunction.
This feature has been tested using PCI transport with Function Level
Reset (FLR) as an example reset mechanism. The reset can be triggered
manually via sysfs (echo 1 > /sys/bus/pci/devices/$PCI_ADDR/reset).
Signed-off-by: Israel Rukshin <israelr@nvidia.com>
Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com>
---
drivers/block/virtio_blk.c | 28 +++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 194417abc105..c3c421783e2a 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -1587,8 +1587,7 @@ static void virtblk_remove(struct virtio_device *vdev)
put_disk(vblk->disk);
}
-#ifdef CONFIG_PM_SLEEP
-static int virtblk_freeze(struct virtio_device *vdev)
+static int virtblk_freeze_priv(struct virtio_device *vdev)
{
struct virtio_blk *vblk = vdev->priv;
@@ -1607,7 +1606,7 @@ static int virtblk_freeze(struct virtio_device *vdev)
return 0;
}
-static int virtblk_restore(struct virtio_device *vdev)
+static int virtblk_restore_priv(struct virtio_device *vdev)
{
struct virtio_blk *vblk = vdev->priv;
int ret;
@@ -1621,8 +1620,29 @@ static int virtblk_restore(struct virtio_device *vdev)
blk_mq_unfreeze_queue(vblk->disk->queue);
return 0;
}
+
+#ifdef CONFIG_PM_SLEEP
+static int virtblk_freeze(struct virtio_device *vdev)
+{
+ return virtblk_freeze_priv(vdev);
+}
+
+static int virtblk_restore(struct virtio_device *vdev)
+{
+ return virtblk_restore_priv(vdev);
+}
#endif
+static int virtblk_reset_prepare(struct virtio_device *vdev)
+{
+ return virtblk_freeze_priv(vdev);
+}
+
+static int virtblk_reset_done(struct virtio_device *vdev)
+{
+ return virtblk_restore_priv(vdev);
+}
+
static const struct virtio_device_id id_table[] = {
{ VIRTIO_ID_BLOCK, VIRTIO_DEV_ANY_ID },
{ 0 },
@@ -1658,6 +1678,8 @@ static struct virtio_driver virtio_blk = {
.freeze = virtblk_freeze,
.restore = virtblk_restore,
#endif
+ .reset_prepare = virtblk_reset_prepare,
+ .reset_done = virtblk_reset_done,
};
static int __init virtio_blk_init(void)
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-01-30 15:57 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-27 6:57 [PATCH v2 0/2] Add Error Recovery support for Virtio PCI devices Israel Rukshin
2024-11-27 6:57 ` [PATCH 1/2] virtio_pci: Add support for PCIe Function Level Reset Israel Rukshin
2024-11-27 6:57 ` [PATCH 2/2] virtio_blk: Add support for transport error recovery Israel Rukshin
2025-01-30 15:48 ` Stefan Hajnoczi
2025-01-30 15:57 ` Michael S. Tsirkin
-- strict thread matches above, loose matches on Subject: below --
2024-11-07 15:16 [PATCH 0/2] Add Error Recovery support for Virtio PCI devices Israel Rukshin
2024-11-07 15:17 ` [PATCH 2/2] virtio_blk: Add support for transport error recovery Israel Rukshin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).