qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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.


  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).