kernel linker: Eliminate unneeded vnet propagation

The module preload happens before vnet0 creation, at this moment the vnet
list is empty thus invoking vnet_data_copy() during preload is a noop.

With recent change 110113bc08, for dynamic module load, aka via kldload,
linker will do vnet propagation right after registering sysctls which
happens after module load, then previous propagation (during module load)
is redundant.

No functional change intended.

MFC after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D39852
This commit is contained in:
Zhenlei Huang 2023-09-09 16:06:23 +08:00
parent 110113bc08
commit 205821a70d
2 changed files with 2 additions and 10 deletions

View file

@ -724,6 +724,7 @@ parse_vnet(elf_file_t ef)
ef->vnet_start = 0;
ef->vnet_stop = 0;
ef->vnet_base = 0;
error = link_elf_lookup_set(&ef->lf, "vnet", (void ***)&ef->vnet_start,
(void ***)&ef->vnet_stop, NULL);
/* Error just means there is no vnet data set to relocate. */
@ -766,7 +767,6 @@ parse_vnet(elf_file_t ef)
return (ENOSPC);
}
memcpy((void *)ef->vnet_base, (void *)ef->vnet_start, size);
vnet_data_copy((void *)ef->vnet_base, size);
elf_set_add(&set_vnet_list, ef->vnet_start, ef->vnet_stop,
ef->vnet_base);

View file

@ -546,7 +546,6 @@ link_elf_link_preload(linker_class_t cls, const char *filename,
}
memcpy(vnet_data, ef->progtab[pb].addr,
ef->progtab[pb].size);
vnet_data_copy(vnet_data, shdr[i].sh_size);
ef->progtab[pb].addr = vnet_data;
#endif
} else if ((ef->progtab[pb].name != NULL &&
@ -1113,18 +1112,11 @@ link_elf_load_file(linker_class_t cls, const char *filename,
error = EINVAL;
goto out;
}
/* Initialize the per-cpu or vnet area. */
/* Initialize the per-cpu area. */
if (ef->progtab[pb].addr != (void *)mapbase &&
!strcmp(ef->progtab[pb].name, DPCPU_SETNAME))
dpcpu_copy(ef->progtab[pb].addr,
shdr[i].sh_size);
#ifdef VIMAGE
else if (ef->progtab[pb].addr !=
(void *)mapbase &&
!strcmp(ef->progtab[pb].name, VNET_SETNAME))
vnet_data_copy(ef->progtab[pb].addr,
shdr[i].sh_size);
#endif
} else
bzero(ef->progtab[pb].addr, shdr[i].sh_size);