我想将工作推迟到工作队伍中,然后使用我的多处理器核心。此外,我想在工作完成后将数据复制回用户空间缓冲区。现在我知道用户空间地址也取决于用户空间进程。我已经将current
传递给了工作函数。如何在工作函数中设置正确的上下文,以便我可以安全地使用copy_to_user
?
答案 0 :(得分:1)
copy_to_user
只打算从用户上下文中调用。从工作队列上下文中调用它是个坏主意。
你可以分配内存块(kmalloc),将它提交给工作队列,等到wokqueue完成它在用户上下文中的工作(在read,write,ioctl等函数中)并将workqueue结果复制到用户空间。
作为另一种方法,您可以分配内核内存并将其映射到用户空间,以便内核和用户空间可以同时直接访问内存。每次workqueue更新内核内存时,数据都可供用户空间使用。您必须在用户空间和内核空间工作队列之间实现某种同步,以使此方法可行。
有关mmap实施的示例,请参阅uvc_queue.c。