From: Simon Glass <simon.glass@canonical.com>
Move XArray type and operation stubs to a dedicated header file
that mirrors the Linux kernel organisation.
xarray.h provides:
- xa_mark_t type for XArray marks
- struct xarray (empty stub)
- xa_init(), xa_destroy() - initialisation stubs
- xa_load(), xa_erase(), xa_insert() - access stubs
- xa_empty() - always returns true
- xa_for_each(), xa_for_each_range() - iteration macros (iterate zero times)
These are stubs since U-Boot doesn't use the XArray data structure.
Co-developed-by: Claude Opus 4.5 <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
---
fs/ext4l/ext4_uboot.h | 26 +++-------------------
include/linux/xarray.h | 50 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 53 insertions(+), 23 deletions(-)
create mode 100644 include/linux/xarray.h
@@ -915,10 +915,9 @@ static inline int in_range(unsigned long val, unsigned long start,
/* folio and pagemap - use linux/pagemap.h */
#include <linux/pagemap.h>
+#include <linux/xarray.h>
-/* xa_mark_t - xarray mark type */
-typedef unsigned int xa_mark_t;
-
+/* wbc_to_tag - convert writeback control to pagecache tag */
static inline xa_mark_t wbc_to_tag(struct writeback_control *wbc)
{
if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
@@ -1673,28 +1672,9 @@ struct buffer_head *__bread(struct block_device *bdev, sector_t block, unsigned
* Stubs for mballoc.c
*/
-/* XArray stub structure */
-struct xarray {
- int dummy;
-};
-
+/* XArray is now in linux/xarray.h */
/* Per-CPU stubs are in linux/percpu.h */
-/* XArray function stubs */
-#define xa_init(xa) do { } while (0)
-#define xa_destroy(xa) do { } while (0)
-#define xa_load(xa, index) ((void *)NULL)
-#define xa_erase(xa, index) do { (void)(xa); (void)(index); } while (0)
-#define xa_insert(xa, index, entry, gfp) ({ (void)(xa); (void)(index); (void)(entry); (void)(gfp); 0; })
-#define xa_empty(xa) ({ (void)(xa); 1; })
-
-/* XArray iteration stubs - iterate zero times */
-#define xa_for_each(xa, index, entry) \
- for ((index) = 0, (entry) = NULL; 0; )
-
-#define xa_for_each_range(xa, index, entry, start, end) \
- for ((index) = (start), (entry) = NULL; 0; )
-
/* Bit operations for little-endian bitmaps */
#define __clear_bit_le(bit, addr) clear_bit_le(bit, addr)
new file mode 100644
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * XArray stubs for U-Boot
+ *
+ * U-Boot doesn't have the XArray data structure, so these are stubs.
+ */
+#ifndef _LINUX_XARRAY_H
+#define _LINUX_XARRAY_H
+
+#include <linux/types.h>
+
+/**
+ * typedef xa_mark_t - XArray mark type
+ *
+ * Used to tag entries in an XArray.
+ */
+typedef unsigned int xa_mark_t;
+
+/**
+ * struct xarray - XArray data structure
+ *
+ * U-Boot stub - the XArray is not used.
+ */
+struct xarray {
+ int dummy;
+};
+
+/* XArray initialisation/destruction stubs */
+#define xa_init(xa) do { } while (0)
+#define xa_destroy(xa) do { } while (0)
+
+/* XArray lookup stubs - always return NULL */
+#define xa_load(xa, index) ((void *)NULL)
+
+/* XArray modification stubs */
+#define xa_erase(xa, index) do { (void)(xa); (void)(index); } while (0)
+#define xa_insert(xa, index, entry, gfp) \
+ ({ (void)(xa); (void)(index); (void)(entry); (void)(gfp); 0; })
+
+/* XArray query stubs - always empty */
+#define xa_empty(xa) ({ (void)(xa); 1; })
+
+/* XArray iteration stubs - iterate zero times */
+#define xa_for_each(xa, index, entry) \
+ for ((index) = 0, (entry) = NULL; 0; )
+
+#define xa_for_each_range(xa, index, entry, start, end) \
+ for ((index) = (start), (entry) = NULL; 0; )
+
+#endif /* _LINUX_XARRAY_H */