RE: [PATCH] VIRTIO_F_USED_EVENT_AUTO_DISABLE: add new used buffer notification suppression mechanism

Lege Wang
2024-07-03T12:14:07Z

hi,

> > > After reading this and the text, I can't figure out how is this feature
> > > supposed to work without races. What if the device uses a buffer while
> > > the driver notification is in flight to the device?
> > Hmm, I think it doesn't matter, Only the used buffer enable notification is
> > transmitted to device successfully, device starts to judge whether it's time
> > to send used buffer notification to driver according to its internal interrupt
> policy.
>
> I don't understand what you are saying. If device has some magical
> interrupt policy why do we need a notification from the driver
> at all.
>
> Conversely, if device relies on the notification and thinks that an
> interrupt is not needed (because it did not get the notification yet),
> while at the same time the driver is blocked waiting for an interrupt,
> we get a deadlock.
No, I'm not saying that our interrupt policy is magical?? Let me explain a bit
more about its simple mechanism here, there're two basic parameters to control
whether device should send used buffer notification to driver:
1. number of used ring entries written since last used buffer notification to driver,
say threshold value is N.
2. Max wait time to send a used buffer notification to driver.

The work flow would look like below:
1. driver enables used buffer notification initially when enabling virtio device
2. driver is blocked waiting interrupt.
3. if the number of used ring entries written by device is equal to or greater than above threshold N,
a used buffered notification is sent to driver immediately, or if this condition is not met, but the period
specified by max wait time has reached, device will still send one used buffer notification to driver.
And device will recount number of used ring entries written by device from zero and start another
Max wait time timer.
4. driver is waken up by interrupt, after it has processed used ring entries, it'll start to wait for interrupt
again and enable used buffer notification.
5. go to step 2.

From above work flow, I don't think the deadlock you describe would happen.

Regards,
Xiaoguang Wang

>
>
> --
> MST