linux-kernel - copy_to_user 在 s390 上如何工作?

标签 linux-kernel virtual-address-space address-space zseries

在 s390 架构上,虚拟内核和用户地址空间永远不会同时存在,那么 copy_to_user 是如何工作的?

最佳答案

s390 的

copy_to_user 在这里实现:linux/arch/s390/include/asm/uaceess.h .

uaccess 是指向 copy_[to/from]_user 实际实现的指针。它在这里设置(grep uaccess):arch/s390/kernel/setup.cuaccess 有 4 种实现,具体取决于模式:

uaccess_mvcos_switchuaccess_ptuaccess_mvcosuaccess_std

例如 uaccess_std 在这里:http://lxr.linux.no/#linux+v3.2.1/arch/s390/lib/uaccess_std.c

4 *  Standard user space access functions based on mvcp/mvcs and doing
5 *  interesting things in the secondary space mode.

...

82 size_t copy_to_user_std(size_t size, void __user *ptr, const void *x)
83 {
84        unsigned long tmp1, tmp2;
85
86        tmp1 = -256UL;
87        asm volatile(
88                "0: mvcs  0(%0,%1),0(%2),%3\n"

使用了mvcp/mvcs机制: http://publib.boulder.ibm.com/infocenter/zos/v1r11/topic/com.ibm.zos.r11.ieaa500/iea2a57031.htm

关于linux-kernel - copy_to_user 在 s390 上如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8944089/

相关文章:

linux - 即使在构建失败后我还能使用 Linux 内核镜像吗

自定义系统调用可以访问另一个进程的内存吗?

c++ - 关于取消引用和地址空间的基本 C++ 指针问题

operating-system - 多级页表——分层分页

Python:在linux下写入另一个进程的内存

c++ - 程序使用的DLL,其中声明的变量存储在哪里?

c - C90 中的 Linux 内核 container_of 宏和通用容器

Linux 页面缓存 - 从内核中的页面缓存中删除页面

linux - 用户空间程序作为内置对象

linux - 仅为我自己禁用和重新启用地址空间布局随机化