gpt4 book ai didi

清零 vmalloc 区域时 Linux 崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 12:12:15 27 4
gpt4 key购买 nike

我正在开发一个 LKM,并且在分配它之后将一个 8192 字节的 vmalloc 区域归零。我知道我可以使用 vzalloc(),但它让我感到困惑,为什么我这样做:

pmem = vmalloc(8192);
ret = safe_zero(pmem, 8192);

当它超过第二页时,VM 崩溃了。我的意思是它被阻止了。 SSH session 断开连接,我必须重新启动。我不明白为什么。

safe_zero 函数是:

int safe_readwrite(void *dst, void *src, size_t len) {
size_t i = 0;
char *cdst = dst, *csrc = src;

pagefault_disable();
for (; i < len; i++) {
cdst[i] = csrc[i];
if (cdst[i] != csrc[i]) {
return -1;
}
}
pagefault_enable();
return 0;
}

int safe_zero(void *dst, size_t len) {
char zero = 0;
size_t i = 0;
int ret = 0;
char *cdst = dst;

for(; i < len; i++) {
//pinfo("writing %d byte(s) at %p\r", sizeof(zero), &cdst[i]);
ret = safe_readwrite(&cdst[i], &zero, sizeof(zero));
if (ret != 0) {
return ret;
}
}
//pinfo("\n");

return 0;
}

谢谢!

最佳答案

我在想没有意义的错误。我测试了通过迭代来进行伪 sleep 。问题出在零之后。我正在使用 sys_write 打印到标准输出,似乎它在通过 SSH 传输之前崩溃了。

对不起。在从独立 GPU 切换到集成 GPU 之前,这种情况并没有发生。

关于清零 vmalloc 区域时 Linux 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48533680/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com