public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Imran Badr" <imran.badr@cavium.com>
To: "'Alan Cox'" <alan@lxorguk.ukuu.org.uk>
Cc: <root@chaos.analogic.com>, "'David S. Miller'" <davem@redhat.com>,
	<phillips@arcor.de>, <linux-kernel@vger.kernel.org>
Subject: RE: Calculating kernel logical address ..
Date: Mon, 9 Sep 2002 15:52:12 -0700	[thread overview]
Message-ID: <01b901c25853$8a0f65f0$9e10a8c0@IMRANPC> (raw)
In-Reply-To: <1031608526.29792.77.camel@irongate.swansea.linux.org.uk>


But the buffer which I am concerned about was allocated my kmalloc() and
mapped to the process space in mmap(). AFAIK, kmalloc'ed buffers are
guaranteed to be mapped.

Here is how I am doing it:

1) Implement mmap method in driver.
2) allocate memory by kmalloc()
3) set reserved bit for all allocated pages.
4) set VM_LOCKED flag on the memory aread. ( vma->flags |= VM_LOCKED; )
5) call remap_page_range() to map physical address of the buffer to the user
space address.

I have posted the complete code in a previous post under the same subject.
Now in ioctl() method, the user gives me the memory address. I know that it
was mmaped by looking at the ioctl code. Now I have to calculate physical
address of the user memory address. I know that it was allocated my kmalloc
so it should be mapped. I am currently accessing the process page tables to
find the kernel logical address so that I could use virt_to_bus() to get bus
address.

adr = user_address;
pgd_offset(current->mm, adr);
if (!pgd_none(*pgd)) {
	pmd = pmd_offset(pgd, adr);
	if (!pmd_none(*pmd)) {
		ptep = pte_offset(pmd, adr);
		pte = *ptep;
		if(pte_present(pte)) {
			kaddr  = (unsigned long) page_address(pte_page(pte));
			kaddr |= (adr & (PAGE_SIZE - 1));
		}
	}
}

One suggestion was to use get_user_pages() after getting appropriate
semaphore but I have learned that this API is fundamentally broken for
architectures with noncoherent caches. Does any body has any solution?

Thanks,
Imran.









-----Original Message-----
From: Alan Cox [mailto:alan@lxorguk.ukuu.org.uk]
Sent: Monday, September 09, 2002 2:55 PM
To: imran.badr@cavium.com
Cc: root@chaos.analogic.com; 'David S. Miller'; phillips@arcor.de;
linux-kernel@vger.kernel.org
Subject: RE: Calculating kernel logical address ..


On Mon, 2002-09-09 at 19:12, Imran Badr wrote:
> But my question here still begging an answer: What would be the portable
way
> to calculate kernel logical address of that user buffer?

Who says it even has one ? Not all user allocated pages are even mapped
into the kernel by default. The kiobuf stuff used in 2.4 will do the job
for 2.4. For 2.5 the API will probably look a little different and be a
fair bit faster



  reply	other threads:[~2002-09-09 22:50 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-09-09 17:06 Calculating kernel logical address Imran Badr
2002-09-09 17:29 ` Richard B. Johnson
2002-09-09 17:23   ` David S. Miller
2002-09-09 17:34     ` Martin J. Bligh
2002-09-09 17:40     ` Daniel Phillips
2002-09-09 17:31   ` Imran Badr
2002-09-09 18:00     ` Richard B. Johnson
2002-09-09 18:12       ` Imran Badr
2002-09-09 18:27         ` Daniel Phillips
2002-09-09 18:41           ` Imran Badr
2002-09-09 21:55         ` Alan Cox
2002-09-09 22:52           ` Imran Badr [this message]
2002-09-09 23:09             ` Alan Cox
2002-09-09 18:13       ` Jesse Barnes
2002-09-09 18:25         ` Daniel Phillips
2002-09-09 19:40           ` Andrew Morton
2002-09-09 20:41             ` Daniel Phillips
2002-09-10  6:43               ` Jens Axboe
2002-09-10  7:12                 ` Andrew Morton
2002-09-09 18:42         ` Andrew Morton
2002-09-10  7:03           ` Gerd Knorr
2002-09-09 18:16       ` Kurt Ferreira
2002-09-09 18:17       ` David S. Miller
2002-09-09 18:17       ` Daniel Phillips
2002-09-09 18:43         ` Richard B. Johnson
2002-09-09 18:50           ` Daniel Phillips
2002-09-09 18:57             ` Richard B. Johnson
2002-09-09 18:08     ` Andrew Morton
2002-09-09 18:23       ` Daniel Phillips
2002-09-09 18:49         ` Imran Badr
2002-09-09 18:46           ` David S. Miller
2002-09-09 19:06           ` Daniel Phillips
2002-09-09 19:14             ` Andrew Morton
2002-09-09 19:23               ` Imran Badr
  -- strict thread matches above, loose matches on Subject: below --
2002-09-09 21:19 Manfred Spraul
2002-09-09 21:47 ` Andrew Morton
2002-09-10 17:01   ` Manfred Spraul
2002-09-09 21:02 Manfred Spraul
2002-09-09 21:07 ` Imran Badr
2002-09-06 15:44 Manfred Spraul
2002-09-06 17:13 ` Imran Badr
2002-09-07  1:57   ` Daniel Phillips
2002-09-06  3:23 side-by-side Re: BYTE Unix Benchmarks Version 3.6 Daniel Phillips
2002-09-06  3:34 ` Calculating kernel logical address Imran Badr
2002-09-07  1:44   ` Daniel Phillips
2002-09-08  0:01     ` David S. Miller
2002-09-08 18:44       ` Daniel Phillips
2002-09-09  5:00         ` David S. Miller
2002-09-09  5:17           ` Daniel Phillips
2002-09-09  5:28             ` David S. Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='01b901c25853$8a0f65f0$9e10a8c0@IMRANPC' \
    --to=imran.badr@cavium.com \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=davem@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=phillips@arcor.de \
    --cc=root@chaos.analogic.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox