git: 205821a70ddd - main - kernel linker: Eliminate unneeded vnet propagation
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 09 Sep 2023 08:21:16 UTC
The branch main has been updated by zlei:
URL: https://cgit.FreeBSD.org/src/commit/?id=205821a70dddfa106f6792e95693f411e8ce52d4
commit 205821a70dddfa106f6792e95693f411e8ce52d4
Author: Zhenlei Huang <zlei@FreeBSD.org>
AuthorDate: 2023-09-09 08:06:23 +0000
Commit: Zhenlei Huang <zlei@FreeBSD.org>
CommitDate: 2023-09-09 08:06:24 +0000
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 110113bc086f, 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
---
sys/kern/link_elf.c | 2 +-
sys/kern/link_elf_obj.c | 10 +---------
2 files changed, 2 insertions(+), 10 deletions(-)
diff --git a/sys/kern/link_elf.c b/sys/kern/link_elf.c
index 3e9998f27baa..568f1e1dbd95 100644
--- a/sys/kern/link_elf.c
+++ b/sys/kern/link_elf.c
@@ -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);
diff --git a/sys/kern/link_elf_obj.c b/sys/kern/link_elf_obj.c
index 768808d2102e..d4ad963e8181 100644
--- a/sys/kern/link_elf_obj.c
+++ b/sys/kern/link_elf_obj.c
@@ -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);