xarray - MarekBykowski/readme GitHub Wiki
It’s a sparse, scalable, tree-backed array of pointers
Eg. place some_pointer2 at index 1000000000.
Without allocating a billion elements.
Only the needed tree nodes are allocated.
#include <linux/xarray.h>
#include <linux/printk.h>
static DEFINE_XARRAY(my_xa);
void example(void)
{
unsigned long index;
void *entry;
void *ptr;
/* Store entries */
xa_store(&my_xa, 42, some_pointer1, GFP_KERNEL);
xa_store(&my_xa, 10, some_pointer2, GFP_KERNEL);
xa_store(&my_xa, 1000000000, some_pointer3, GFP_KERNEL);
/* Direct lookups */
ptr = xa_load(&my_xa, 42);
pr_info("lookup 42 -> %p\n", ptr);
ptr = xa_load(&my_xa, 10);
pr_info("lookup 10 -> %p\n", ptr);
ptr = xa_load(&my_xa, 1000000000);
pr_info("lookup 1000000000 -> %p\n", ptr);
/* Iterate over all stored entries */
xa_for_each(&my_xa, index, entry) {
pr_info("xa_for_each: index=%lu entry=%p\n",
index, entry);
}
}