From mboxrd@z Thu Jan 1 00:00:00 1970 content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C519B2.7EB90558" Subject: mapping user data in kernel Date: Wed, 23 Feb 2005 15:18:07 +0100 Message-ID: <22326A72AE6CF647B89C8371452F6BFA7E7D90@frex02.fr.nds.com> From: "Hermann, Guy" Sender: owner-linux-mm@kvack.org Return-Path: To: linux-mm@kvack.org List-ID: This is a multi-part message in MIME format. ------_=_NextPart_001_01C519B2.7EB90558 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi everybody, here is a pb we don't manage to solve. The general idea consists in a user process that gives data from its = userspace to the kernel. And the kernel makes them available to other user processes. To modelize that we have 3 entities: -a (user process) producer that mounts a FS and gives the corresponding = data to the kernel thanks to the 5th parameter of mount() -a dedicated kernel module handles the FS, it receives the (user = process) data and makes them available to the user processes (produceur and other processes) -a (user process) consumer that gets data from the kernel via the FS = syscalls. While the producer keeps being alive (doing nothing, but data given to = the kernel still existing), a consumer reads the mounted FS : the kernel makes the producer's data = available (to another process than the producer) by finding the corresponding page and mapping = it in the kernel when needed. Indeed, the kernel has kept the data virtual address and the = struct task of the producer (having therefore access to the mm of the producer) But it seems that the kernel does not see the correct data after mapping = the page of the producer when being in the context of the consumer. 1st question: Is such a treament (mapping in the kernel a page belonging to a user = process that is not the current one) relevant ? (can we use pgd_offset for a task->mm that does = not belong to the current process?) 2nd question: If 1st question OK, why does this not work (were it in user-mode linux = or in kernel mode) ? Please find enclosed, the code of the module (which should be inserted = in the kernel), the code of the producer and consumer and the makefiles. All these sources have been simplified as far as possible, the strategic = treatments are in -newfs_getpage of module.c: this function tries to remap a page that = does not belong to the current process in the kernel -newfs_check_data of module.c: this function tries to find the bytes = that characterize (magic bytes) the data into the mapped page Furthermore, the read data (even when incorrect) are displayed to have a = visual comparison: original data are characters or '.', incorrect data are represented by = '?'.... To perform the test: -insert the module in the kernel (insmod) -mkdir /mnt/newfs -run the producer -then run the consumer Thanks in advance for helping... GH ------_=_NextPart_001_01C519B2.7EB90558 Content-Type: application/x-gzip; name="sources.tar.gz" Content-Transfer-Encoding: base64 Content-Description: sources.tar.gz Content-Disposition: attachment; filename="sources.tar.gz" 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 88tu/h/McmaZAEABAA== ------_=_NextPart_001_01C519B2.7EB90558-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: aart@kvack.org