qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/3] s390x/pci: fixup the code walking IOMMU tab


From: Pierre Morel
Subject: Re: [Qemu-devel] [PATCH 1/3] s390x/pci: fixup the code walking IOMMU tables
Date: Thu, 1 Feb 2018 14:17:01 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0

On 01/02/2018 13:15, Cornelia Huck wrote:
On Thu, 1 Feb 2018 12:56:01 +0100
Pierre Morel <address@hidden> wrote:

On 01/02/2018 12:28, Yi Min Zhao wrote:

在 2018/1/31 下午6:58, Cornelia Huck 写道:
On Tue, 30 Jan 2018 10:47:13 +0100
Yi Min Zhao <address@hidden> wrote:
diff --git a/hw/s390x/s390-pci-inst.c b/hw/s390x/s390-pci-inst.c
index be449210d9..63fa06fb97 100644
--- a/hw/s390x/s390-pci-inst.c
+++ b/hw/s390x/s390-pci-inst.c
@@ -644,16 +644,6 @@ int rpcit_service_call(S390CPU *cpu, uint8_t
r1, uint8_t r2, uintptr_t ra)
         while (start < end) {
           entry = imrc->translate(iommu_mr, start, IOMMU_NONE);
-
-        if (!entry.translated_addr) {
-            pbdev->state = ZPCI_FS_ERROR;
-            setcc(cpu, ZPCI_PCI_LS_ERR);
-            s390_set_status_code(env, r1, ZPCI_PCI_ST_INSUF_RES);
-            s390_pci_generate_error_event(ERR_EVENT_SERR,
pbdev->fh, pbdev->fid,
-                                          start, ERR_EVENT_Q_BIT);
-            goto out;
-        }
-
           memory_region_notify_iommu(iommu_mr, entry);
           start += entry.addr_mask + 1;
You're now progressing even though you might have generated an error
event. Is that what's intended?
Yes, this is wrong. The right thing is only delete the code generating
error event,
and keep the if check here in this patch.
Hum, I do not see any problem with having a translated address being 0.

I would say it is one of the fixup ;) .
Isn't this in response to an instruction that is supposed to
register/... something? IOW, the caller of the instruction tried to
make something happen, but something did not work out as intended (and
doesn't the code stumble over this later? Or do we get an error then?)
Shouldn't the caller get an indication of that? Of course, this again
depends on what the architecture says :)

I don't think so, I think it was really an implementation error in the
previous code because we have no way to return an error from the
translate() function, we just return the TLB entry.

If we have an R or W or RW entry we return the entry in all other cases,
including a RW protected, invalid or on internal error entry we return IOMMU_NONE

IMHO it would have been clearer if this function have been void.

Regards,

Pierre

--
Pierre Morel
Linux/KVM/QEMU in Böblingen - Germany




reply via email to

[Prev in Thread] Current Thread [Next in Thread]