public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Thomas Hellström" <thomas@shipmail.org>
To: Dave Airlie <airlied@linux.ie>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	Alex Deucher <alexdeucher@gmail.com>,
	Andrew Lutomirski <luto@mit.edu>,
	dri-devel@lists.sf.net, Jerome Glisse <jglisse@redhat.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [git pull] drm: previous pull req + 1.
Date: Mon, 22 Jun 2009 10:18:02 +0200	[thread overview]
Message-ID: <4A3F3E3A.2030202@shipmail.org> (raw)
In-Reply-To: <alpine.DEB.2.00.0906212336200.20307@skynet.skynet.ie>

Dave Airlie wrote:
>> On Sun, 21 Jun 2009, Andrew Lutomirski wrote:
>>     
>>>> Anyway, here's a totally UNTESTED patch that hopefully gives a warning on
>>>> where exactly we set the invalid bits. Andy, mind trying it out? You
>>>> should get the warnign much earlier, and it should have a much more useful
>>>> back-trace.
>>>>         
>>> Your patch worked.  Photo attached.
>>>       
>> Ok.
>>
>> So it's fb_mmap() that uses an invalid page frame number when it does the 
>> "io_remap_pfn_range()" thing. 
>>
>> And the way it gets that page frame number is basically
>>
>>  - Offset (in bytes) from start of mapping:
>>
>> 	off = vma->vm_pgoff << PAGE_SHIFT;
>> 	..
>>
>>  - frame buffer start address:
>>
>>         /* frame buffer memory */
>>         start = info->fix.smem_start;
>>         len = PAGE_ALIGN((start & ~PAGE_MASK) + info->fix.smem_len);
>> 	..
>> 	off += start;
>>
>>  - do the remap:
>>
>> 	io_remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT, ..
>>
>> and there has been no changes to this logic in drivers/video/fbmem.c 
>> lately.
>>
>> What *has* changed is that we have a newradeon driver, and it looks like 
>> that new radeon driver is crap, and does this:
>>
>> 	info->fix.smem_start = (unsigned long)fbptr;
>>
>> which is totally screwed up. It assigns a _virtual_ address to that 
>> "smem_start" thing, even though it should be a physical one. 
>>
>> I don't know the radeon driver, so I don't know where to find the physical 
>> address.  It's also possible that there is no good single physical 
>> address, and the radeon driver should implement a "fb_mmap" function.
>>
>> Does this patch make the warning and the oops at least go away? Obviously 
>> it won't result in a working frame buffer, but that's a separate issue
>>
>> 		Linus
>>     
>
> I noticed the same bogus line myself last night, I'll get Jerome to look 
> at it since its his code, he was trying to be smart about how the 
> radeon fbdev emulation should work, but fbdev isn't smart enough to do 
> what he wants, so I've asked him to go back to the dumb pin the fbcon in 
> VRAM until we can fix fbdev to do some sort of prepare/commit type hooks 
> around blocks of reads/writes.
>
> With the safe method we end up with an 8MB pinned fbcon on 32MB in some 
> scenarios, which is still totally unacceptable from a user pov.
>
>   
There is a ttm_fbdev_mmap() function in TTM that may help in this 
situation. As with the standard ttm mmap it's using fault() which means 
it's possible to move out the backing buffer object if you first reserve 
it and then call unmap_mapping_range() on the relevant fbdev address 
space to kill existing user-space mappings.

We've experimented a little with this on the Poulsbo / Moorestown KMS 
driver (we threw out the fbcon buffer when the X server was switched in) 
but the problem turned out to be that fbdev always expects an always 
present _kernel_ mapping and it seemed a bit too hard to block accesses 
to that mapping while it was torn down and set up again to point to the 
new location.
In particular, the fbdev acceleration hooks seems to be called from 
atomic context.

It would be very helpful if we could introduce an fbdev mutex that 
protects fbdev accesses to the kernel map and to the fbdev acceleration 
functions.

/Thomas








  reply	other threads:[~2009-06-22  8:35 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-20  5:23 [git pull] drm: previous pull req + 1 Dave Airlie
2009-06-21  0:04 ` Maxim Levitsky
2009-06-21  0:42   ` Linus Torvalds
2009-06-21 14:47     ` Maxim Levitsky
2009-06-21 21:24       ` Chris Wilson
2009-06-22 18:09         ` Maxim Levitsky
2009-06-29  7:57           ` Chris Wilson
2009-06-30  9:49             ` Chris Wilson
2009-07-09 23:11             ` Eric Anholt
2009-06-21  1:33   ` Dave Airlie
2009-06-21  3:41 ` Andy Lutomirski
2009-06-21  5:16   ` Dave Airlie
2009-06-21 12:06     ` Andrew Lutomirski
2009-06-21 16:46     ` Linus Torvalds
2009-06-21 17:13       ` Linus Torvalds
2009-06-21 18:50         ` Andrew Lutomirski
2009-06-21 19:47           ` Linus Torvalds
2009-06-21 21:14             ` Andrew Lutomirski
2009-06-22  0:05               ` Andrew Lutomirski
2009-06-22 19:20                 ` Arnaldo Carvalho de Melo
2009-06-21 22:40             ` Dave Airlie
2009-06-22  8:18               ` Thomas Hellström [this message]
2009-06-22  8:30                 ` Dave Airlie
2009-06-22 18:22                 ` Linus Torvalds
2009-06-22 18:59                   ` Andrew Lutomirski
2009-06-22 19:43                     ` Linus Torvalds
2009-06-23  0:01                   ` Benjamin Herrenschmidt
2009-06-23  0:00                 ` Benjamin Herrenschmidt
2009-06-23  0:24                   ` Linus Torvalds
2009-06-23  1:04                     ` Benjamin Herrenschmidt
2009-06-23  1:18                       ` Jesse Barnes
2009-06-23  1:58                         ` Benjamin Herrenschmidt
2009-06-23  2:07                           ` Jesse Barnes
2009-06-23  2:26                             ` Benjamin Herrenschmidt
2009-06-23 15:40                               ` Jesse Barnes
2009-06-23  7:48                         ` Michel Dänzer
2009-06-23 15:39                           ` Jesse Barnes
2009-06-23 16:28                             ` Jesse Barnes
2009-06-22 23:57             ` Benjamin Herrenschmidt
2009-06-21 22:41       ` Dave Airlie

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=4A3F3E3A.2030202@shipmail.org \
    --to=thomas@shipmail.org \
    --cc=airlied@linux.ie \
    --cc=alexdeucher@gmail.com \
    --cc=dri-devel@lists.sf.net \
    --cc=jglisse@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@mit.edu \
    --cc=torvalds@linux-foundation.org \
    /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