mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2026-04-26 08:15:59 +03:00
[PR #4065] [MERGED] Kernel.Event: Implement kqueue and kevent #3912
Labels
No labels
Bloodborne
bug
contributor wanted
documentation
enhancement
frontend
good first issue
help wanted
linux
pull-request
question
release
verification progress
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/shadPS4#3912
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/shadps4-emu/shadPS4/pull/4065
Author: @StevenMiller123
Created: 2/22/2026
Status: ✅ Merged
Merged: 2/22/2026
Merged by: @georgemoralis
Base:
main← Head:kqueue-kevent📝 Commits (10+)
b1ae80cRemove dead code from EqueueInternal::WaitForEventsf7a0075Refactor type names8aa4d92Properly define OrbisKernelEqueue as a handle60acea8Clangd6d8adaWiden OrbisKernelEqueue type4ca1ac5kqueue implementationbcaf120Hardware-accurate timer datacaae979Move callback scheduling to EqueueInternal::AddEvent30e6db4posix_keventacd7034Log calls📊 Changes
10 files changed (+366 additions, -197 deletions)
View changed files
📝
src/core/file_sys/fs.h(+2 -1)📝
src/core/libraries/gnmdriver/gnmdriver.cpp(+17 -13)📝
src/core/libraries/gnmdriver/gnmdriver.h(+3 -3)📝
src/core/libraries/kernel/equeue.cpp(+285 -134)📝
src/core/libraries/kernel/equeue.h(+19 -11)📝
src/core/libraries/kernel/file_system.cpp(+2 -1)📝
src/core/libraries/videoout/driver.cpp(+2 -2)📝
src/core/libraries/videoout/driver.h(+2 -2)📝
src/core/libraries/videoout/video_out.cpp(+30 -26)📝
src/core/libraries/videoout/video_out.h(+4 -4)📄 Description
The bulk of this PR is a refactor, swapping our SceKernelEqueue to a 64-bit integer to match real hardware behavior, and implementing the necessary structure to store equeues instead of relying on games passing them around. I also renamed our structs to OrbisKernel prefixes to match our modern standards.
Additionally, to make this implementation reasonable, I moved timer scheduling to
EqueueInternal::AddEvent, and changed logic for data storage in timer and small timer events to match libkernel behavior.This needs testing, the only title I own that calls these is Assassin's Creed Unity, and that isn't really affected by this, since it's just using kevent to add a read event to their equeue.
As far as I've tested locally, I haven't broken anything involving normal equeue event usage.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.