Skip to content

GSI Allocator: free GSIs when they are no longer used#74

Open
amphi wants to merge 2 commits intocyberus-technology:gardenlinuxfrom
amphi:gsi-allocator-bitmap
Open

GSI Allocator: free GSIs when they are no longer used#74
amphi wants to merge 2 commits intocyberus-technology:gardenlinuxfrom
amphi:gsi-allocator-bitmap

Conversation

@amphi
Copy link

@amphi amphi commented Feb 2, 2026

This PR changes the GsiAllocator to enable it to free GSIs when they are no longer used. To do that, it replaces the u32 that was used to track used GSIs with a simple bitmap. If you know a good bitmap crate that I should use, please tell me.

While I was here, I also made sure that errors from the allocator a propagated. I also used the bitmap for the IRQs of the GsiAllocator, just because it made it easier for me to propagate useful errors.

I am not completely sure whether I free the GSIs at all necessary places.

@amphi amphi self-assigned this Feb 2, 2026
@phip1611
Copy link
Member

phip1611 commented Feb 2, 2026

. If you know a good bitmap crate that I should use, please tell me.

I think a bitmap is trivial enough to keep the functionality in the module itself

self.gsis.lock().unwrap().alloc()
}

/// Frees a GSI
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit/idea: we could also totally over-engineer this:

Each Gsi could be a smart object with a Weak reference to the allcoator. Once the element drops, it removes itself from the GsiAllocator`

Copy link
Author

@amphi amphi Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, we could do that. But I am unsure whether we should do that.

Sounds totally over engineered, but on the other hand this would solve the question when to free the interrupts.

@amphi amphi force-pushed the gsi-allocator-bitmap branch from 85288f5 to 94c8bd8 Compare February 2, 2026 13:21
amphi added 2 commits February 2, 2026 14:26
The old implementation used a u32 to allocate new GSIs. The counter
increased every time a new GSI was allocated, and freeing GSIs was not
possible. Thus, Cloud Hypervisor could run out of GSIs and panic.

This new implementation can also free GSIs. Please note that this commit
only replaces the old mechanism, the next commit will introduce a
mechanism to free used GSIs.

While I was here I also propagated the errors that the allocator may
throw where necessary.

On-behalf-of: SAP sebastian.eydam@sap.com
Signed-off-by: Sebastian Eydam <sebastian.eydam@cyberus-technology.de>
These changes free GSIs when they are no longer used. That way we
shouldn't exhaust the available GSIs anymore when attaching and
detaching devices.

On-behalf-of: SAP sebastian.eydam@sap.com
Signed-off-by: Sebastian Eydam <sebastian.eydam@cyberus-technology.de>
@amphi amphi force-pushed the gsi-allocator-bitmap branch from 94c8bd8 to f05cdf5 Compare February 2, 2026 13:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants