take into account args/envs' offset in page
- prepare_process_ranges_args_envs()
This commit is contained in:
@@ -80,6 +80,7 @@ int prepare_process_ranges_args_envs(struct process *proc,
|
|||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
uintptr_t interp_obase = -1;
|
uintptr_t interp_obase = -1;
|
||||||
uintptr_t interp_nbase = -1;
|
uintptr_t interp_nbase = -1;
|
||||||
|
size_t map_size;
|
||||||
|
|
||||||
n = p->num_sections;
|
n = p->num_sections;
|
||||||
|
|
||||||
@@ -205,7 +206,8 @@ int prepare_process_ranges_args_envs(struct process *proc,
|
|||||||
/* Only map remote address if it wasn't specified as an argument */
|
/* Only map remote address if it wasn't specified as an argument */
|
||||||
if (!args) {
|
if (!args) {
|
||||||
// Map in remote physical addr of args and copy it
|
// Map in remote physical addr of args and copy it
|
||||||
args_envs_npages = (p->args_len + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
map_size = ((uintptr_t)p->args & (PAGE_SIZE - 1)) + p->args_len;
|
||||||
|
args_envs_npages = (map_size + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
||||||
dkprintf("args_envs_npages: %d\n", args_envs_npages);
|
dkprintf("args_envs_npages: %d\n", args_envs_npages);
|
||||||
args_envs_rp = ihk_mc_map_memory(NULL,
|
args_envs_rp = ihk_mc_map_memory(NULL,
|
||||||
(unsigned long)p->args, p->args_len);
|
(unsigned long)p->args, p->args_len);
|
||||||
@@ -238,7 +240,8 @@ int prepare_process_ranges_args_envs(struct process *proc,
|
|||||||
/* Only map remote address if it wasn't specified as an argument */
|
/* Only map remote address if it wasn't specified as an argument */
|
||||||
if (!envs) {
|
if (!envs) {
|
||||||
// Map in remote physical addr of envs and copy it after args
|
// Map in remote physical addr of envs and copy it after args
|
||||||
args_envs_npages = (p->envs_len + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
map_size = ((uintptr_t)p->envs & (PAGE_SIZE - 1)) + p->envs_len;
|
||||||
|
args_envs_npages = (map_size + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
||||||
dkprintf("args_envs_npages: %d\n", args_envs_npages);
|
dkprintf("args_envs_npages: %d\n", args_envs_npages);
|
||||||
args_envs_rp = ihk_mc_map_memory(NULL, (unsigned long)p->envs,
|
args_envs_rp = ihk_mc_map_memory(NULL, (unsigned long)p->envs,
|
||||||
p->envs_len);
|
p->envs_len);
|
||||||
|
|||||||
Reference in New Issue
Block a user