bootconfig: Cleanup dummy headers in tools/bootconfig

Cleanup dummy headers in tools/bootconfig/include except
for tools/bootconfig/include/linux/bootconfig.h.
For this change, I use __KERNEL__ macro to split kernel
header #include and introduce xbc_alloc_mem() and
xbc_free_mem().

Link: https://lkml.kernel.org/r/163187299574.2366983.18371329724128746091.stgit@devnote2

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
Masami Hiramatsu 2021-09-17 19:03:16 +09:00 committed by Steven Rostedt (VMware)
parent 4f292c4886
commit 4ee1b4cac2
11 changed files with 93 additions and 91 deletions

View File

@ -7,8 +7,18 @@
* Author: Masami Hiramatsu <mhiramat@kernel.org> * Author: Masami Hiramatsu <mhiramat@kernel.org>
*/ */
#ifdef __KERNEL__
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/types.h> #include <linux/types.h>
#else /* !__KERNEL__ */
/*
* NOTE: This is only for tools/bootconfig, because tools/bootconfig will
* run the parser sanity test.
* This does NOT mean linux/bootconfig.h is available in the user space.
* However, if you change this file, please make sure the tools/bootconfig
* has no issue on building and running.
*/
#endif
#define BOOTCONFIG_MAGIC "#BOOTCONFIG\n" #define BOOTCONFIG_MAGIC "#BOOTCONFIG\n"
#define BOOTCONFIG_MAGIC_LEN 12 #define BOOTCONFIG_MAGIC_LEN 12

View File

@ -4,6 +4,7 @@
* Masami Hiramatsu <mhiramat@kernel.org> * Masami Hiramatsu <mhiramat@kernel.org>
*/ */
#ifdef __KERNEL__
#include <linux/bootconfig.h> #include <linux/bootconfig.h>
#include <linux/bug.h> #include <linux/bug.h>
#include <linux/ctype.h> #include <linux/ctype.h>
@ -11,6 +12,16 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/memblock.h> #include <linux/memblock.h>
#include <linux/string.h> #include <linux/string.h>
#else /* !__KERNEL__ */
/*
* NOTE: This is only for tools/bootconfig, because tools/bootconfig will
* run the parser sanity test.
* This does NOT mean lib/bootconfig.c is available in the user space.
* However, if you change this file, please make sure the tools/bootconfig
* has no issue on building and running.
*/
#include <linux/bootconfig.h>
#endif
/* /*
* Extra Boot Config (XBC) is given as tree-structured ascii text of * Extra Boot Config (XBC) is given as tree-structured ascii text of
@ -31,6 +42,29 @@ static int xbc_err_pos __initdata;
static int open_brace[XBC_DEPTH_MAX] __initdata; static int open_brace[XBC_DEPTH_MAX] __initdata;
static int brace_index __initdata; static int brace_index __initdata;
#ifdef __KERNEL__
static inline void *xbc_alloc_mem(size_t size)
{
return memblock_alloc(size, SMP_CACHE_BYTES);
}
static inline void xbc_free_mem(void *addr, size_t size)
{
memblock_free_ptr(addr, size);
}
#else /* !__KERNEL__ */
static inline void *xbc_alloc_mem(size_t size)
{
return malloc(size);
}
static inline void xbc_free_mem(void *addr, size_t size)
{
free(addr);
}
#endif
/** /**
* xbc_get_info() - Get the information of loaded boot config * xbc_get_info() - Get the information of loaded boot config
* node_size: A pointer to store the number of nodes. * node_size: A pointer to store the number of nodes.
@ -859,11 +893,11 @@ static int __init xbc_parse_tree(void)
*/ */
void __init xbc_exit(void) void __init xbc_exit(void)
{ {
memblock_free_ptr(xbc_data, xbc_data_size); xbc_free_mem(xbc_data, xbc_data_size);
xbc_data = NULL; xbc_data = NULL;
xbc_data_size = 0; xbc_data_size = 0;
xbc_node_num = 0; xbc_node_num = 0;
memblock_free_ptr(xbc_nodes, sizeof(struct xbc_node) * XBC_NODE_MAX); xbc_free_mem(xbc_nodes, sizeof(struct xbc_node) * XBC_NODE_MAX);
xbc_nodes = NULL; xbc_nodes = NULL;
brace_index = 0; brace_index = 0;
} }
@ -902,7 +936,7 @@ int __init xbc_init(const char *data, size_t size, const char **emsg, int *epos)
return -ERANGE; return -ERANGE;
} }
xbc_data = memblock_alloc(size + 1, SMP_CACHE_BYTES); xbc_data = xbc_alloc_mem(size + 1);
if (!xbc_data) { if (!xbc_data) {
if (emsg) if (emsg)
*emsg = "Failed to allocate bootconfig data"; *emsg = "Failed to allocate bootconfig data";
@ -912,8 +946,7 @@ int __init xbc_init(const char *data, size_t size, const char **emsg, int *epos)
xbc_data[size] = '\0'; xbc_data[size] = '\0';
xbc_data_size = size + 1; xbc_data_size = size + 1;
xbc_nodes = memblock_alloc(sizeof(struct xbc_node) * XBC_NODE_MAX, xbc_nodes = xbc_alloc_mem(sizeof(struct xbc_node) * XBC_NODE_MAX);
SMP_CACHE_BYTES);
if (!xbc_nodes) { if (!xbc_nodes) {
if (emsg) if (emsg)
*emsg = "Failed to allocate bootconfig nodes"; *emsg = "Failed to allocate bootconfig nodes";

View File

@ -17,7 +17,7 @@ ALL_PROGRAMS := $(patsubst %,$(OUTPUT)%,$(ALL_TARGETS))
all: $(ALL_PROGRAMS) test all: $(ALL_PROGRAMS) test
$(OUTPUT)bootconfig: main.c $(LIBSRC) $(OUTPUT)bootconfig: main.c include/linux/bootconfig.h $(LIBSRC)
$(CC) $(filter %.c,$^) $(CFLAGS) -o $@ $(CC) $(filter %.c,$^) $(CFLAGS) -o $@
test: $(ALL_PROGRAMS) test-bootconfig.sh test: $(ALL_PROGRAMS) test-bootconfig.sh

View File

@ -2,10 +2,53 @@
#ifndef _BOOTCONFIG_LINUX_BOOTCONFIG_H #ifndef _BOOTCONFIG_LINUX_BOOTCONFIG_H
#define _BOOTCONFIG_LINUX_BOOTCONFIG_H #define _BOOTCONFIG_LINUX_BOOTCONFIG_H
#include "../../../../include/linux/bootconfig.h" #include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <ctype.h>
#include <errno.h>
#include <string.h>
#ifndef fallthrough #ifndef fallthrough
# define fallthrough # define fallthrough
#endif #endif
#define WARN_ON(cond) \
((cond) ? printf("Internal warning(%s:%d, %s): %s\n", \
__FILE__, __LINE__, __func__, #cond) : 0)
#define unlikely(cond) (cond)
/* Copied from lib/string.c */
static inline char *skip_spaces(const char *str)
{
while (isspace(*str))
++str;
return (char *)str;
}
static inline char *strim(char *s)
{
size_t size;
char *end;
size = strlen(s);
if (!size)
return s;
end = s + size - 1;
while (end >= s && isspace(*end))
end--;
*(end + 1) = '\0';
return skip_spaces(s);
}
#define __init
#define __initdata
#include "../../../../include/linux/bootconfig.h"
#endif #endif

View File

@ -1,12 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _SKC_LINUX_BUG_H
#define _SKC_LINUX_BUG_H
#include <stdio.h>
#include <stdlib.h>
#define WARN_ON(cond) \
((cond) ? printf("Internal warning(%s:%d, %s): %s\n", \
__FILE__, __LINE__, __func__, #cond) : 0)
#endif

View File

@ -1,7 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _SKC_LINUX_CTYPE_H
#define _SKC_LINUX_CTYPE_H
#include <ctype.h>
#endif

View File

@ -1,7 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _SKC_LINUX_ERRNO_H
#define _SKC_LINUX_ERRNO_H
#include <asm/errno.h>
#endif

View File

@ -1,14 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _SKC_LINUX_KERNEL_H
#define _SKC_LINUX_KERNEL_H
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#define unlikely(cond) (cond)
#define __init
#define __initdata
#endif

View File

@ -1,11 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _XBC_LINUX_MEMBLOCK_H
#define _XBC_LINUX_MEMBLOCK_H
#include <stdlib.h>
#define SMP_CACHE_BYTES 0
#define memblock_alloc(size, align) malloc(size)
#define memblock_free_ptr(paddr, size) free(paddr)
#endif

View File

@ -1,32 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _SKC_LINUX_STRING_H
#define _SKC_LINUX_STRING_H
#include <string.h>
/* Copied from lib/string.c */
static inline char *skip_spaces(const char *str)
{
while (isspace(*str))
++str;
return (char *)str;
}
static inline char *strim(char *s)
{
size_t size;
char *end;
size = strlen(s);
if (!size)
return s;
end = s + size - 1;
while (end >= s && isspace(*end))
end--;
*(end + 1) = '\0';
return skip_spaces(s);
}
#endif

View File

@ -12,7 +12,6 @@
#include <errno.h> #include <errno.h>
#include <endian.h> #include <endian.h>
#include <linux/kernel.h>
#include <linux/bootconfig.h> #include <linux/bootconfig.h>
#define pr_err(fmt, ...) fprintf(stderr, fmt, ##__VA_ARGS__) #define pr_err(fmt, ...) fprintf(stderr, fmt, ##__VA_ARGS__)