From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: Akihiko Odaki <akihiko.odaki@daynix.com>
Cc: "Mauro Matteo Cascella" <mcascell@redhat.com>,
"P J P" <pj.pandit@yahoo.co.in>,
"Alexander Bulekov" <alxndr@bu.edu>,
"Dmitry Fleytman" <dmitry.fleytman@gmail.com>,
"Beniamino Galvani" <b.galvani@gmail.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Strahinja Jankovic" <strahinja.p.jankovic@gmail.com>,
"Jason Wang" <jasowang@redhat.com>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
"Alistair Francis" <alistair@alistair23.me>,
"Stefan Weil" <sw@weilnetz.de>, "Cédric Le Goater" <clg@kaod.org>,
"Andrew Jeffery" <andrew@aj.id.au>,
"Joel Stanley" <joel@jms.id.au>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Helge Deller" <deller@gmx.de>,
"Sriram Yagnaraman" <sriram.yagnaraman@est.tech>,
"Thomas Huth" <huth@tuxfamily.org>,
"Aleksandar Rikalo" <aleksandar.rikalo@syrmia.com>,
"Subbaraya Sundeep" <sundeep.lkml@gmail.com>,
"Jan Kiszka" <jan.kiszka@web.de>,
"Tyrone Ting" <kfting@nuvoton.com>,
"Hao Wu" <wuhaotsh@google.com>,
"Max Filippov" <jcmvbkbc@gmail.com>,
"Jiri Pirko" <jiri@resnulli.us>,
"Daniel Henrique Barboza" <danielhb413@gmail.com>,
"David Gibson" <david@gibson.dropbear.id.au>,
"Greg Kurz" <groug@kaod.org>,
"Harsh Prateek Bora" <harshpb@linux.ibm.com>,
"Sven Schnelle" <svens@stackframe.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Stefano Stabellini" <sstabellini@kernel.org>,
"Anthony Perard" <anthony.perard@citrix.com>,
"Paul Durrant" <paul@xen.org>, "Rob Herring" <robh@kernel.org>,
"Gerd Hoffmann" <kraxel@redhat.com>,
qemu-arm@nongnu.org, qemu-devel@nongnu.org, qemu-ppc@nongnu.org,
xen-devel@lists.xenproject.org
Subject: Re: [PATCH v2 0/2] net: Update MemReentrancyGuard for NIC
Date: Thu, 1 Jun 2023 10:56:17 +0200 [thread overview]
Message-ID: <f3dc3d82-3928-c75c-18cf-dc42b9060c65@linaro.org> (raw)
In-Reply-To: <233b42b2-6fbb-3882-6158-d2a82bf88be1@daynix.com>
On 1/6/23 09:41, Akihiko Odaki wrote:
> On 2023/06/01 16:16, Philippe Mathieu-Daudé wrote:
>> On 1/6/23 05:18, Akihiko Odaki wrote:
>>> Recently MemReentrancyGuard was added to DeviceState to record that the
>>> device is engaging in I/O. The network device backend needs to update it
>>> when delivering a packet to a device.
>>>
>>> This implementation follows what bottom half does, but it does not add
>>> a tracepoint for the case that the network device backend started
>>> delivering a packet to a device which is already engaging in I/O. This
>>> is because such reentrancy frequently happens for
>>> qemu_flush_queued_packets() and is insignificant.
>>>
>>> This series consists of two patches. The first patch makes a bulk
>>> change to
>>> add a new parameter to qemu_new_nic() and does not contain behavioral
>>> changes.
>>> The second patch actually implements MemReentrancyGuard update.
>>
>> /me look at the 'net' API.
>>
>> So the NetReceive* handlers from NetClientInfo process the HW NIC
>> data flow, independently from the CPUs.
>>
>> IIUC MemReentrancyGuard is supposed to protect reentrancy abuse from
>> CPUs.
>>
>> NetReceive* handlers aren't restricted to any particular API, they
>> just consume blob of data. Looking at e1000_receive_iov(), this data
>> is filled into memory using the pci_dma_rw() API. pci_dma_rw() gets
>> the AddressSpace to use calling pci_get_address_space(), which returns
>> PCIDevice::bus_master_as. Then we use the dma_memory_rw(), followed
>> by address_space_rw(). Beh, I fail to see why there is reentrancy
>> checks from this NIC DMA HW path.
>>
>> Maybe the MemoryRegion API isn't the correct place to check for
>> reentrancy abuse and we should do that at the AddressSpace level,
>> keeping DMA ASes clear and only protecting CPU ASes?
>
> The involvement of CPU is not essential in my understanding. A typical
> scenario of DMA reentrancy is like the following:
> 1) The guest configures the DMA destination address register the device
> has to the address of another device register.
> 2) The DMA gets triggered.
> 3) The device performs the DMA, writing its own register.
> 4) The write causes reentrancy.
> 5) The re-entered device code corrupts the device state.
>
> I guess 2) is done by CPU in most cases, but sometimes it happen with
> another cause. In fact, the current reentrancy protection code covers
> the case that bottom half handlers triggers DMA. The intention of this
> series is to extend the coverage and handles the case that incoming
> network traffic triggers DMA.
>
> The essence of DMA reentrancy is in 3). This happens when the DMA
> address space contains the MMIO region of the device and there is no
> involvement of CPU here.
OK, thanks for the explanation.
next prev parent reply other threads:[~2023-06-01 8:57 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-01 3:18 [PATCH v2 0/2] net: Update MemReentrancyGuard for NIC Akihiko Odaki
2023-06-01 3:18 ` [PATCH v2 1/2] net: Provide MemReentrancyGuard * to qemu_new_nic() Akihiko Odaki
2023-06-05 8:06 ` Alexander Bulekov
2023-06-05 10:50 ` Akihiko Odaki
2024-04-24 10:05 ` Philippe Mathieu-Daudé
2024-04-24 10:41 ` Prasad Pandit
2024-04-24 12:32 ` Thomas Huth
2024-04-26 12:37 ` Akihiko Odaki
2024-04-26 13:38 ` Philippe Mathieu-Daudé
2024-04-26 16:02 ` BALATON Zoltan
2023-06-01 3:18 ` [PATCH v2 2/2] net: Update MemReentrancyGuard for NIC Akihiko Odaki
2023-06-05 8:04 ` Alexander Bulekov
2023-06-01 7:16 ` [PATCH v2 0/2] " Philippe Mathieu-Daudé
2023-06-01 7:41 ` Akihiko Odaki
2023-06-01 8:56 ` Philippe Mathieu-Daudé [this message]
2023-09-21 7:16 ` Akihiko Odaki
2023-11-14 5:29 ` Jason Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f3dc3d82-3928-c75c-18cf-dc42b9060c65@linaro.org \
--to=philmd@linaro.org \
--cc=akihiko.odaki@daynix.com \
--cc=aleksandar.rikalo@syrmia.com \
--cc=alistair@alistair23.me \
--cc=alxndr@bu.edu \
--cc=andrew@aj.id.au \
--cc=anthony.perard@citrix.com \
--cc=b.galvani@gmail.com \
--cc=clg@kaod.org \
--cc=danielhb413@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=deller@gmx.de \
--cc=dmitry.fleytman@gmail.com \
--cc=edgar.iglesias@gmail.com \
--cc=groug@kaod.org \
--cc=harshpb@linux.ibm.com \
--cc=huth@tuxfamily.org \
--cc=jan.kiszka@web.de \
--cc=jasowang@redhat.com \
--cc=jcmvbkbc@gmail.com \
--cc=jiri@resnulli.us \
--cc=joel@jms.id.au \
--cc=kfting@nuvoton.com \
--cc=kraxel@redhat.com \
--cc=mcascell@redhat.com \
--cc=mst@redhat.com \
--cc=paul@xen.org \
--cc=peter.maydell@linaro.org \
--cc=pj.pandit@yahoo.co.in \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=robh@kernel.org \
--cc=sriram.yagnaraman@est.tech \
--cc=sstabellini@kernel.org \
--cc=strahinja.p.jankovic@gmail.com \
--cc=sundeep.lkml@gmail.com \
--cc=svens@stackframe.org \
--cc=sw@weilnetz.de \
--cc=wuhaotsh@google.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).