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);
    }
}