[vbox-dev] vgdrvIoCtl_CancelAllWaitEvents inconsistent behavior ?

Michael Thayer michael.thayer at oracle.com
Mon Jul 3 18:49:51 UTC 2017

Hello Hans,

03.07.2017 17:21, Hans de Goede wrote:
> Hi,
> So while working on cleaning up the vboxguest driver for mainline
> linux kernel submission (*) I noticed some inconsistent behavior
> wrt vgdrvIoCtl_CancelAllWaitEvents vs vgdrvIoCtl_WaitEvent.
> If there are no waiters then vgdrvIoCtl_CancelAllWaitEvents
> sets pSession->fPendingCancelWaitEvents and then when
> vgdrvIoCtl_WaitEvent calls vbdgCheckWaitEventCondition it
> if u32EventFlagsOut is 0.
> While as vgdrvIoCtl_WaitEvent actually waits and then
> vgdrvIoCtl_CancelAllWaitEvents gets called u32Result
> I'm planning on rewriting all this code to directly
> use Linux waitqueues and I was wondering if I should
> preserve this behavior ?
> *) Very much WIP, see: https://github.com/jwrdegoede/vboxguest

I did not get any response when I asked around about this.  Reading the
code (quite a bit of work, as you presumably discovered too; fortunately
the user-space part is a bit easier) suggests that this is not intended,
as I could not find a caller in trunk or versions 5.1, 5.0 or 4.3 which
depended on this behaviour, and one of the few callers that I did find
(src/VBox/Additions/common/VBoxService/VBoxServiceCpuHotPlug.cpp) looks
like it would handle it incorrectly.  I will correct this in our code
too unless someone here speaks up.

Thanks for spotting that!

Michael Thayer | VirtualBox engineer
ORACLE Deutschland B.V. & Co. KG | Werkstr. 24 | D-71384 Weinstadt

ORACLE Deutschland B.V. & Co. KG
Hauptverwaltung: Riesstraße 25, D-80992 München
Registergericht: Amtsgericht München, HRA 95603

Komplementärin: ORACLE Deutschland Verwaltung B.V.
Hertogswetering 163/167, 3543 AS Utrecht, Niederlande Handelsregister
der Handelskammer Midden-Nederland, Nr. 30143697
Geschäftsführer: Alexander van der Ven, Jan Schultheiss, Val Maher

More information about the vbox-dev mailing list