aboutsummaryrefslogtreecommitdiff
path: root/lib/pci_caps.c
diff options
context:
space:
mode:
authorSwapnil Ingle <swapnil.ingle@nutanix.com>2021-05-25 15:25:35 +0200
committerGitHub <noreply@github.com>2021-05-25 15:25:35 +0200
commit405f2ffc3125d44c7fde31fe2bb9b312746eb4e1 (patch)
treee2ab2e95b859e71010a574815ba0664a35b02789 /lib/pci_caps.c
parentf74a146a6b93f7bd366853739d8ec0dfc9c4a48f (diff)
downloadlibvfio-user-405f2ffc3125d44c7fde31fe2bb9b312746eb4e1.zip
libvfio-user-405f2ffc3125d44c7fde31fe2bb9b312746eb4e1.tar.gz
libvfio-user-405f2ffc3125d44c7fde31fe2bb9b312746eb4e1.tar.bz2
Handle support of PCI FLR capability (#517)
* Handle support of PCI FLR capability If device supports FLR cap then call vfu_reset_cb_t when FLR is initiated by client. Signed-off-by: Swapnil Ingle <swapnil.ingle@nutanix.com> Reviewed-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
Diffstat (limited to 'lib/pci_caps.c')
-rw-r--r--lib/pci_caps.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/pci_caps.c b/lib/pci_caps.c
index 550d373..b00b9b8 100644
--- a/lib/pci_caps.c
+++ b/lib/pci_caps.c
@@ -277,8 +277,16 @@ handle_px_pxdc_write(vfu_ctx_t *vfu_ctx, struct pxcap *px,
}
if (p->iflr) {
- vfu_log(vfu_ctx, LOG_DEBUG,
- "initiate function level reset");
+ if (px->pxdcap.flrc == 0) {
+ vfu_log(vfu_ctx, LOG_ERR, "FLR capability is not supported");
+ return ERROR_INT(EINVAL);
+ }
+ if (vfu_ctx->reset != NULL) {
+ vfu_log(vfu_ctx, LOG_DEBUG, "initiate function level reset");
+ return vfu_ctx->reset(vfu_ctx, VFU_RESET_PCI_FLR);
+ } else {
+ vfu_log(vfu_ctx, LOG_ERR, "FLR callback is not implemented");
+ }
}
return 0;