@@ -61,9 +61,12 @@ static inline void * __init xbc_alloc_mem(size_t size)
61
61
return memblock_alloc (size , SMP_CACHE_BYTES );
62
62
}
63
63
64
- static inline void __init xbc_free_mem (void * addr , size_t size )
64
+ static inline void __init xbc_free_mem (void * addr , size_t size , bool early )
65
65
{
66
- memblock_free (addr , size );
66
+ if (early )
67
+ memblock_free (addr , size );
68
+ else if (addr )
69
+ memblock_free_late (__pa (addr ), size );
67
70
}
68
71
69
72
#else /* !__KERNEL__ */
@@ -73,7 +76,7 @@ static inline void *xbc_alloc_mem(size_t size)
73
76
return malloc (size );
74
77
}
75
78
76
- static inline void xbc_free_mem (void * addr , size_t size )
79
+ static inline void xbc_free_mem (void * addr , size_t size , bool early )
77
80
{
78
81
free (addr );
79
82
}
@@ -904,13 +907,13 @@ static int __init xbc_parse_tree(void)
904
907
* If you need to reuse xbc_init() with new boot config, you can
905
908
* use this.
906
909
*/
907
- void __init xbc_exit ( void )
910
+ void __init _xbc_exit ( bool early )
908
911
{
909
- xbc_free_mem (xbc_data , xbc_data_size );
912
+ xbc_free_mem (xbc_data , xbc_data_size , early );
910
913
xbc_data = NULL ;
911
914
xbc_data_size = 0 ;
912
915
xbc_node_num = 0 ;
913
- xbc_free_mem (xbc_nodes , sizeof (struct xbc_node ) * XBC_NODE_MAX );
916
+ xbc_free_mem (xbc_nodes , sizeof (struct xbc_node ) * XBC_NODE_MAX , early );
914
917
xbc_nodes = NULL ;
915
918
brace_index = 0 ;
916
919
}
@@ -963,7 +966,7 @@ int __init xbc_init(const char *data, size_t size, const char **emsg, int *epos)
963
966
if (!xbc_nodes ) {
964
967
if (emsg )
965
968
* emsg = "Failed to allocate bootconfig nodes" ;
966
- xbc_exit ( );
969
+ _xbc_exit (true );
967
970
return - ENOMEM ;
968
971
}
969
972
memset (xbc_nodes , 0 , sizeof (struct xbc_node ) * XBC_NODE_MAX );
@@ -977,7 +980,7 @@ int __init xbc_init(const char *data, size_t size, const char **emsg, int *epos)
977
980
* epos = xbc_err_pos ;
978
981
if (emsg )
979
982
* emsg = xbc_err_msg ;
980
- xbc_exit ( );
983
+ _xbc_exit (true );
981
984
} else
982
985
ret = xbc_node_num ;
983
986
0 commit comments