Before fix seabios used level handling of GPE events (_Lxx methods).
1. read event bit from GPE0.sts register
2. mask event in GPR0.en register
3. execute _Lxx method from bios (could take long time)
4. clear event in GPE0.sts register
5. unmask event in GPE0.en register
It was a large enough race window, to loose a hot-plug event. If a new device was hot-plugged while guest were executing a previous hot-plug event in steps 1-4, then in step 5 guest would clear a new hot-plug event and therefore loose it.
This fix switches from level (_Lxx) to edge (_Exx) methods for handling hot-plug GPE.
Using edge GPE handling, guest reads and clears GPE0.sts register first and only then executes event method.
This results in that hot-add event can't be lost because of a new hot-plug event will be set in GPE0.sts after it has been cleared or guest will handle several hot-plugged devices while executing current event method.