1 Star 0 Fork 109

panchenbo / qemu

forked from src-openEuler / qemu 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Revert-vfio-pci-Implement-return_page_response-page-.patch 6.91 KB
一键复制 编辑 原始数据 按行查看 历史
yezengruan 提交于 2022-11-22 17:45 . Qemu update to version 6.2.0-59
From 50e365a162cb7dd39d724fa1c5823e82d184af3a Mon Sep 17 00:00:00 2001
From: Kunkun Jiang <jiangkunkun@huawei.com>
Date: Fri, 18 Nov 2022 15:22:26 +0800
Subject: [PATCH 09/36] Revert "vfio/pci: Implement return_page_response page
response callback"
This reverts commit 6bbf810edebdb89a6958519ee3adfb1888520231.
Signed-off-by: Kunkun Jiang <jiangkunkun@huawei.com>
---
hw/vfio/pci.c | 123 --------------------------------------------------
hw/vfio/pci.h | 2 -
2 files changed, 125 deletions(-)
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index 8e24f9c7d1..c54e62fe8f 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -2693,61 +2693,6 @@ out:
g_free(fault_region_info);
}
-static void vfio_init_fault_response_regions(VFIOPCIDevice *vdev, Error **errp)
-{
- struct vfio_region_info *fault_region_info = NULL;
- struct vfio_region_info_cap_fault *cap_fault;
- VFIODevice *vbasedev = &vdev->vbasedev;
- struct vfio_info_cap_header *hdr;
- char *fault_region_name;
- int ret;
-
- ret = vfio_get_dev_region_info(&vdev->vbasedev,
- VFIO_REGION_TYPE_NESTED,
- VFIO_REGION_SUBTYPE_NESTED_DMA_FAULT_RESPONSE,
- &fault_region_info);
- if (ret) {
- goto out;
- }
-
- hdr = vfio_get_region_info_cap(fault_region_info,
- VFIO_REGION_INFO_CAP_DMA_FAULT_RESPONSE);
- if (!hdr) {
- error_setg(errp, "failed to retrieve DMA FAULT RESPONSE capability");
- goto out;
- }
- cap_fault = container_of(hdr, struct vfio_region_info_cap_fault,
- header);
- if (cap_fault->version != 1) {
- error_setg(errp, "Unsupported DMA FAULT RESPONSE API version %d",
- cap_fault->version);
- goto out;
- }
-
- fault_region_name = g_strdup_printf("%s DMA FAULT RESPONSE %d",
- vbasedev->name,
- fault_region_info->index);
-
- ret = vfio_region_setup(OBJECT(vdev), vbasedev,
- &vdev->dma_fault_response_region,
- fault_region_info->index,
- fault_region_name);
- g_free(fault_region_name);
- if (ret) {
- error_setg_errno(errp, -ret,
- "failed to set up the DMA FAULT RESPONSE region %d",
- fault_region_info->index);
- goto out;
- }
-
- ret = vfio_region_mmap(&vdev->dma_fault_response_region);
- if (ret) {
- error_setg_errno(errp, -ret, "Failed to mmap the DMA FAULT RESPONSE queue");
- }
-out:
- g_free(fault_region_info);
-}
-
static void vfio_populate_device(VFIOPCIDevice *vdev, Error **errp)
{
VFIODevice *vbasedev = &vdev->vbasedev;
@@ -2823,12 +2768,6 @@ static void vfio_populate_device(VFIOPCIDevice *vdev, Error **errp)
return;
}
- vfio_init_fault_response_regions(vdev, &err);
- if (err) {
- error_propagate(errp, err);
- return;
- }
-
irq_info.index = VFIO_PCI_ERR_IRQ_INDEX;
ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_GET_IRQ_INFO, &irq_info);
@@ -3007,68 +2946,8 @@ static int vfio_iommu_set_pasid_table(PCIBus *bus, int32_t devfn,
return ioctl(container->fd, VFIO_IOMMU_SET_PASID_TABLE, &info);
}
-static int vfio_iommu_return_page_response(PCIBus *bus, int32_t devfn,
- IOMMUPageResponse *resp)
-{
- PCIDevice *pdev = bus->devices[devfn];
- VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev);
- struct iommu_page_response *response = &resp->resp;
- struct vfio_region_dma_fault_response header;
- struct iommu_page_response *queue;
- char *queue_buffer = NULL;
- ssize_t bytes;
-
- if (!vdev->dma_fault_response_region.mem) {
- return -EINVAL;
- }
-
- /* read the header */
- bytes = pread(vdev->vbasedev.fd, &header, sizeof(header),
- vdev->dma_fault_response_region.fd_offset);
- if (bytes != sizeof(header)) {
- error_report("%s unable to read the fault region header (0x%lx)",
- __func__, bytes);
- return -1;
- }
-
- /* Normally the fault queue is mmapped */
- queue = (struct iommu_page_response *)vdev->dma_fault_response_region.mmaps[0].mmap;
- if (!queue) {
- size_t queue_size = header.nb_entries * header.entry_size;
-
- error_report("%s: fault queue not mmapped: slower fault handling",
- vdev->vbasedev.name);
-
- queue_buffer = g_malloc(queue_size);
- bytes = pread(vdev->vbasedev.fd, queue_buffer, queue_size,
- vdev->dma_fault_response_region.fd_offset + header.offset);
- if (bytes != queue_size) {
- error_report("%s unable to read the fault queue (0x%lx)",
- __func__, bytes);
- return -1;
- }
-
- queue = (struct iommu_page_response *)queue_buffer;
- }
- /* deposit the new response in the queue and increment the head */
- memcpy(queue + header.head, response, header.entry_size);
-
- vdev->fault_response_head_index =
- (vdev->fault_response_head_index + 1) % header.nb_entries;
- bytes = pwrite(vdev->vbasedev.fd, &vdev->fault_response_head_index, 4,
- vdev->dma_fault_response_region.fd_offset);
- if (bytes != 4) {
- error_report("%s unable to write the fault response region head index (0x%lx)",
- __func__, bytes);
- }
- g_free(queue_buffer);
-
- return 0;
-}
-
static PCIPASIDOps vfio_pci_pasid_ops = {
.set_pasid_table = vfio_iommu_set_pasid_table,
- .return_page_response = vfio_iommu_return_page_response,
};
static void vfio_dma_fault_notifier_handler(void *opaque)
@@ -3532,7 +3411,6 @@ static void vfio_instance_finalize(Object *obj)
vfio_display_finalize(vdev);
vfio_bars_finalize(vdev);
vfio_region_finalize(&vdev->dma_fault_region);
- vfio_region_finalize(&vdev->dma_fault_response_region);
g_free(vdev->emulated_config_bits);
g_free(vdev->rom);
/*
@@ -3554,7 +3432,6 @@ static void vfio_exitfn(PCIDevice *pdev)
vfio_unregister_err_notifier(vdev);
vfio_unregister_ext_irq_notifiers(vdev);
vfio_region_exit(&vdev->dma_fault_region);
- vfio_region_exit(&vdev->dma_fault_response_region);
pci_device_set_intx_routing_notifier(&vdev->pdev, NULL);
if (vdev->irqchip_change_notifier.notify) {
kvm_irqchip_remove_change_notifier(&vdev->irqchip_change_notifier);
diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h
index 61b3bf1303..03ac8919ef 100644
--- a/hw/vfio/pci.h
+++ b/hw/vfio/pci.h
@@ -147,8 +147,6 @@ struct VFIOPCIDevice {
VFIOPCIExtIRQ *ext_irqs;
VFIORegion dma_fault_region;
uint32_t fault_tail_index;
- VFIORegion dma_fault_response_region;
- uint32_t fault_response_head_index;
int (*resetfn)(struct VFIOPCIDevice *);
uint32_t vendor_id;
uint32_t device_id;
--
2.27.0
1
https://gitee.com/panchenbo/qemu.git
git@gitee.com:panchenbo/qemu.git
panchenbo
qemu
qemu
master

搜索帮助