KCacheMaintenanceInterruptEvent

KCacheMaintenanceInterruptEvent

class KCacheMaintenanceInterruptEvent extends KBaseInterruptEvent

This object handles data cache (L2C not included) and instruction cache maintainance.

There is only one instance of this object.

Size : 0x4C bytes (N3DS) / 0x34 bytes (O3DS)

OffsetTypeDescription
0x0void **Pointer to vtable
0x4u8Cache operation
0x5u8Indicates whether to do the operation asynchronically (this is what is used when processes are running for ranges >= 0x200 bytes)
0x6s8Number of cores still doing cache maintenance operations
0x7u8Padding
0x8KThread *Thread operating on the object
0xCvoid *Start address (when applicable)
0x10void *End address (when applicable)
0x14KThreadLinkedListNode *Related to KThread+0xA0
0x18KThreadLinkedList *KThread+0xA8 of the current thread
0x1CKAsyncCacheMaintenanceInterruptEvent[number of cores]Used when the field at offset 0x5 is 1, see below

Possible operations (any other value leads to a kernel panic):

OperationDescription
4Invalidate data cache range
5Clean data cache range
6Clean and invalidate data cache range
7Invalidate instruction cache range (also flush the entire branch target cache and the prefetch buffer)
8Invalidate entire data cache
9Clean entire data cache
10Clean and invalidate entire data cache
11Invalidate entire instruction cache (also flush the entire branch target cache and the prefetch buffer)

KAsyncCacheMaintenanceInterruptEvent extends KSchedulableInterruptEvent, size = 0xC bytes:

OffsetTypeDescription
0x0void **Pointer to vtable
0x4KSchedulableInterruptEvent *Next interrupt event
0x8const KThread *Thread woken up by the first virtual function of this object, doing the actual cache maintenance operation. Same for all

Category:Kernel interrupt events