read/patch_process_vm(): map non-LWK physical addresses properly
This commit is contained in:
@@ -2295,8 +2295,18 @@ int read_process_vm(struct process_vm *vm, void *kdst, const void *usrc, size_t
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
va = phys_to_virt(pa);
|
if (pa < ihk_mc_get_memory_address(IHK_MC_GMA_MAP_START, 0) ||
|
||||||
memcpy(to, va, cpsize);
|
pa >= ihk_mc_get_memory_address(IHK_MC_GMA_MAP_END, 0)) {
|
||||||
|
dkprintf("%s: pa is outside of LWK memory, to: %p, pa: %p,"
|
||||||
|
"cpsize: %d\n", __FUNCTION__, to, pa, cpsize);
|
||||||
|
va = ihk_mc_map_virtual(pa, 1, PTATTR_ACTIVE);
|
||||||
|
memcpy(to, va, cpsize);
|
||||||
|
ihk_mc_unmap_virtual(va, 1, 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
va = phys_to_virt(pa);
|
||||||
|
memcpy(to, va, cpsize);
|
||||||
|
}
|
||||||
|
|
||||||
from += cpsize;
|
from += cpsize;
|
||||||
to += cpsize;
|
to += cpsize;
|
||||||
@@ -2422,8 +2432,18 @@ int patch_process_vm(struct process_vm *vm, void *udst, const void *ksrc, size_t
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
va = phys_to_virt(pa);
|
if (pa < ihk_mc_get_memory_address(IHK_MC_GMA_MAP_START, 0) ||
|
||||||
memcpy(va, from, cpsize);
|
pa >= ihk_mc_get_memory_address(IHK_MC_GMA_MAP_END, 0)) {
|
||||||
|
dkprintf("%s: pa is outside of LWK memory, from: %p,"
|
||||||
|
"pa: %p, cpsize: %d\n", __FUNCTION__, from, pa, cpsize);
|
||||||
|
va = ihk_mc_map_virtual(pa, 1, PTATTR_ACTIVE);
|
||||||
|
memcpy(va, from, cpsize);
|
||||||
|
ihk_mc_unmap_virtual(va, 1, 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
va = phys_to_virt(pa);
|
||||||
|
memcpy(va, from, cpsize);
|
||||||
|
}
|
||||||
|
|
||||||
from += cpsize;
|
from += cpsize;
|
||||||
to += cpsize;
|
to += cpsize;
|
||||||
|
|||||||
@@ -281,6 +281,13 @@ process_procfs_request(unsigned long rarg)
|
|||||||
ans = -EIO;
|
ans = -EIO;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pa < ihk_mc_get_memory_address(IHK_MC_GMA_MAP_START, 0) ||
|
||||||
|
pa >= ihk_mc_get_memory_address(IHK_MC_GMA_MAP_END, 0)) {
|
||||||
|
ans = -EIO;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
va = phys_to_virt(pa);
|
va = phys_to_virt(pa);
|
||||||
if(readwrite)
|
if(readwrite)
|
||||||
memcpy(va, buf + ans, size);
|
memcpy(va, buf + ans, size);
|
||||||
|
|||||||
Reference in New Issue
Block a user