kho_out
static struct kho_out kho_out = {
.lock = __MUTEX_INITIALIZER(kho_out.lock),
.orders = XARRAY_INIT(kho_out.track.orders, 0),
guard(mutex)(&kho_out.lock);
ret = kho_mem_serialize(&kho_out);
kho_out.finalized = true;
guard(mutex)(&kho_out.lock);
return kho_out.finalized;
void *root = kho_out.fdt;
kho_out.fdt = kho_alloc_preserve(PAGE_SIZE);
if (IS_ERR(kho_out.fdt)) {
err = PTR_ERR(kho_out.fdt);
err = kho_out_debugfs_init(&kho_out.dbg);
WARN_ON_ONCE(kho_debugfs_fdt_add(&kho_out.dbg, "fdt",
kho_out.fdt, true));
kho_unpreserve_free(kho_out.fdt);
kho_out.fdt = NULL;
image->kho.fdt = virt_to_phys(kho_out.fdt);
ptr = fdt_getprop_w(kho_out.fdt, 0, KHO_FDT_MEMORY_MAP_PROP_NAME, NULL);
static int kho_mem_serialize(struct kho_out *kho_out)
xa_for_each(&kho_out->track.orders, order, physxa) {
void *root_fdt = kho_out.fdt;
guard(mutex)(&kho_out.lock);
WARN_ON_ONCE(kho_debugfs_fdt_add(&kho_out.dbg, name, fdt, false));
void *root_fdt = kho_out.fdt;
guard(mutex)(&kho_out.lock);
kho_debugfs_fdt_remove(&kho_out.dbg, fdt);
struct kho_mem_track *track = &kho_out.track;
struct kho_mem_track *track = &kho_out.track;
struct kho_mem_track *track = &kho_out.track;
struct kho_mem_track *track = &kho_out.track;
struct kho_mem_track *track = &kho_out.track;