kernel/slab: Use FIFO queuing for PARANOID_KERNEL_FREE only.
FIFO does seem to be a slight performance hit, and the security benefits are probably not too large in the end. So just use LIFO otherwise.
This commit is contained in:
@@ -357,10 +357,10 @@ object_depot_make_empty(object_depot* depot, uint32 flags)
|
|||||||
// detach the depot's full and empty magazines
|
// detach the depot's full and empty magazines
|
||||||
|
|
||||||
slab_queue fullMagazines = depot->full;
|
slab_queue fullMagazines = depot->full;
|
||||||
depot->full.head = depot->full.tail = NULL;
|
depot->full.Init();
|
||||||
|
|
||||||
slab_queue emptyMagazines = depot->empty;
|
slab_queue emptyMagazines = depot->empty;
|
||||||
depot->empty.head = depot->empty.tail = NULL;
|
depot->empty.Init();
|
||||||
|
|
||||||
writeLocker.Unlock();
|
writeLocker.Unlock();
|
||||||
|
|
||||||
|
|||||||
@@ -8,11 +8,14 @@
|
|||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#include "kernel_debug_config.h"
|
||||||
|
|
||||||
|
|
||||||
struct slab_queue_link {
|
struct slab_queue_link {
|
||||||
slab_queue_link* next;
|
slab_queue_link* next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if PARANOID_KERNEL_FREE
|
||||||
struct slab_queue {
|
struct slab_queue {
|
||||||
slab_queue_link* head;
|
slab_queue_link* head;
|
||||||
slab_queue_link* tail;
|
slab_queue_link* tail;
|
||||||
@@ -44,6 +47,29 @@ struct slab_queue {
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
#else /* LIFO queue */
|
||||||
|
struct slab_queue {
|
||||||
|
slab_queue_link* head;
|
||||||
|
|
||||||
|
void Init()
|
||||||
|
{
|
||||||
|
head = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Push(slab_queue_link* item)
|
||||||
|
{
|
||||||
|
item->next = head;
|
||||||
|
head = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
slab_queue_link* Pop()
|
||||||
|
{
|
||||||
|
slab_queue_link* item = head;
|
||||||
|
head = item->next;
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif // SLAB_QUEUE_H
|
#endif // SLAB_QUEUE_H
|
||||||
|
|||||||
Reference in New Issue
Block a user