> On Feb 1, 2023, at 1:24 PM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > On Wed, Feb 01, 2023 at 10:44:22AM -0800, Song Liu wrote: > >> static ssize_t show_datasize(struct module_attribute *mattr, >> struct module_kobject *mk, char *buffer) >> { >> - return sprintf(buffer, "%u\n", mk->mod->data_layout.size); >> + unsigned int size = 0; >> + >> + for_class_mod_mem_type(type, core) { >> + if (type == MOD_TEXT) >> + continue; > > isn't this the same as: > > for_class_mod_mem_type(type, core_data) > > ? Great catch! > >> + size += mk->mod->mem[type].size; >> + } >> + return sprintf(buffer, "%u\n", size); >> } > > >> - lockdep_free_key_range(mod->data_layout.base, mod->data_layout.size); >> + for_class_mod_mem_type(type, core) { >> + lockdep_free_key_range(mod->mem[type].base, >> + mod->mem[type].size); >> + } > > Why the core_data to core change? Specifically the difference seems to > be you now include text. Now, we shouldn't be having lockdep keys in > text, so it's harmless, still a bit weird. Will fix! Thanks, Song