mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-23 03:06:48 +00:00
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:
parent
110113bc08
commit
205821a70d
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue