projects
/
linux-2.6-microblaze.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge tag 'fiemap_for_v5.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git]
/
mm
/
slub.c
diff --git
a/mm/slub.c
b/mm/slub.c
index
af984e4
..
f77d8cd
100644
(file)
--- a/
mm/slub.c
+++ b/
mm/slub.c
@@
-576,8
+576,8
@@
static void print_section(char *level, char *text, u8 *addr,
unsigned int length)
{
metadata_access_enable();
unsigned int length)
{
metadata_access_enable();
- print_hex_dump(level,
kasan_reset_tag(text)
, DUMP_PREFIX_ADDRESS,
- 16, 1,
addr
, length, 1);
+ print_hex_dump(level,
text
, DUMP_PREFIX_ADDRESS,
+ 16, 1,
kasan_reset_tag((void *)addr)
, length, 1);
metadata_access_disable();
}
metadata_access_disable();
}
@@
-1400,12
+1400,13
@@
check_slabs:
static int __init setup_slub_debug(char *str)
{
slab_flags_t flags;
static int __init setup_slub_debug(char *str)
{
slab_flags_t flags;
+ slab_flags_t global_flags;
char *saved_str;
char *slab_list;
bool global_slub_debug_changed = false;
bool slab_list_specified = false;
char *saved_str;
char *slab_list;
bool global_slub_debug_changed = false;
bool slab_list_specified = false;
-
slub_debug
= DEBUG_DEFAULT_FLAGS;
+
global_flags
= DEBUG_DEFAULT_FLAGS;
if (*str++ != '=' || !*str)
/*
* No options specified. Switch on full debugging.
if (*str++ != '=' || !*str)
/*
* No options specified. Switch on full debugging.
@@
-1417,7
+1418,7
@@
static int __init setup_slub_debug(char *str)
str = parse_slub_debug_flags(str, &flags, &slab_list, true);
if (!slab_list) {
str = parse_slub_debug_flags(str, &flags, &slab_list, true);
if (!slab_list) {
-
slub_debug
= flags;
+
global_flags
= flags;
global_slub_debug_changed = true;
} else {
slab_list_specified = true;
global_slub_debug_changed = true;
} else {
slab_list_specified = true;
@@
-1426,16
+1427,18
@@
static int __init setup_slub_debug(char *str)
/*
* For backwards compatibility, a single list of flags with list of
/*
* For backwards compatibility, a single list of flags with list of
- * slabs means debugging is only enabled for those slabs, so the global
- * slub_debug should be 0. We can extended that to multiple lists as
+ * slabs means debugging is only changed for those slabs, so the global
+ * slub_debug should be unchanged (0 or DEBUG_DEFAULT_FLAGS, depending
+ * on CONFIG_SLUB_DEBUG_ON). We can extended that to multiple lists as
* long as there is no option specifying flags without a slab list.
*/
if (slab_list_specified) {
if (!global_slub_debug_changed)
* long as there is no option specifying flags without a slab list.
*/
if (slab_list_specified) {
if (!global_slub_debug_changed)
-
slub_debug = 0
;
+
global_flags = slub_debug
;
slub_debug_string = saved_str;
}
out:
slub_debug_string = saved_str;
}
out:
+ slub_debug = global_flags;
if (slub_debug != 0 || slub_debug_string)
static_branch_enable(&slub_debug_enabled);
else
if (slub_debug != 0 || slub_debug_string)
static_branch_enable(&slub_debug_enabled);
else
@@
-3236,12
+3239,12
@@
struct detached_freelist {
struct kmem_cache *s;
};
struct kmem_cache *s;
};
-static inline void free_nonslab_page(struct page *page)
+static inline void free_nonslab_page(struct page *page
, void *object
)
{
unsigned int order = compound_order(page);
VM_BUG_ON_PAGE(!PageCompound(page), page);
{
unsigned int order = compound_order(page);
VM_BUG_ON_PAGE(!PageCompound(page), page);
- kfree_hook(
page_address(page)
);
+ kfree_hook(
object
);
mod_lruvec_page_state(page, NR_SLAB_UNRECLAIMABLE_B, -(PAGE_SIZE << order));
__free_pages(page, order);
}
mod_lruvec_page_state(page, NR_SLAB_UNRECLAIMABLE_B, -(PAGE_SIZE << order));
__free_pages(page, order);
}
@@
-3282,7
+3285,7
@@
int build_detached_freelist(struct kmem_cache *s, size_t size,
if (!s) {
/* Handle kalloc'ed objects */
if (unlikely(!PageSlab(page))) {
if (!s) {
/* Handle kalloc'ed objects */
if (unlikely(!PageSlab(page))) {
- free_nonslab_page(page);
+ free_nonslab_page(page
, object
);
p[size] = NULL; /* mark object processed */
return size;
}
p[size] = NULL; /* mark object processed */
return size;
}
@@
-4258,7
+4261,7
@@
void kfree(const void *x)
page = virt_to_head_page(x);
if (unlikely(!PageSlab(page))) {
page = virt_to_head_page(x);
if (unlikely(!PageSlab(page))) {
- free_nonslab_page(page);
+ free_nonslab_page(page
, object
);
return;
}
slab_free(page->slab_cache, page, object, NULL, 1, _RET_IP_);
return;
}
slab_free(page->slab_cache, page, object, NULL, 1, _RET_IP_);