All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@domain.hid>
To: rpm@xenomai.org
Cc: Xenomai-core@domain.hid
Subject: Re: [Xenomai-core] pgprot_noncached for io-remapping?
Date: Sun, 16 Mar 2008 18:54:51 +0100	[thread overview]
Message-ID: <47DD5EEB.30609@domain.hid> (raw)
In-Reply-To: <47DD5A2C.3050606@domain.hid>

[-- Attachment #1: Type: text/plain, Size: 3980 bytes --]

Philippe Gerum wrote:
> Jan Kiszka wrote:
>> Philippe Gerum wrote:
>>> Jan Kiszka wrote:
>>>> Philippe Gerum wrote:
>>>>> Jan Kiszka wrote:
>>>>>> Philippe Gerum wrote:
>>>>>>> Jan Kiszka wrote:
>>>>>>>> Philippe Gerum wrote:
>>>>>>>>> Jan Kiszka wrote:
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> doesn't this patch [1] have some relevance for us as well? As we use
>>>>>>>>>> xnarch_remap_io_page_range also for non-IO memory, I'm hesitating to
>>>>>>>>>> suggest that we apply this unconditionally at xnarch level. Ideas welcome.
>>>>>>>>>>
>>>>>>>>> Yes, I think it makes a lot of sense on powerpc at least, since doing so will
>>>>>>>>> set the PAGE_GUARDED bit as well, and we obviously want to avoid any
>>>>>>>>> out-of-order access of I/O memory.
>>>>>>>>>
>>>>>>>>> (I don't see the reason to force the VM_RESERVED and VM_IO on the vma though,
>>>>>>>>> since remap_pfn_range will do it anyway.)
>>>>>>>> No, I was talking about cases where we may pass kmalloc'ed memory to
>>>>>>>> xnarch_remap_io_page_range. In that case, caching and out-of-order
>>>>>>>> access may be desired for performance reasons.
>>>>>>>>
>>>>>>> xnarch_remap_io_page_range is intended for I/O memory only, some assumptions are
>>>>>>> made on this. rtdm_mmap_buffer() should be fixed; it would be much better to
>>>>>>> define another internal interface at xnarch level to specifically perform
>>>>>>> kmalloc mapping.
>>>>>> Yeah, probably. But I think the issue is not just limited to RTDM. The
>>>>>> xnheap can be kmalloc-hosted as well.
>>>>>>
>>>>> This one is used with DMA memory. What I would suggest, is something like this:
>>>>>
>>>>> --- ksrc/skins/rtdm/drvlib.c	(revision 3590)
>>>>> +++ ksrc/skins/rtdm/drvlib.c	(working copy)
>>>>> @@ -1738,9 +1738,12 @@
>>>>>  		}
>>>>>  		return 0;
>>>>>  	} else
>>>>> -#endif /* CONFIG_MMU */
>>>>>  		return xnarch_remap_io_page_range(vma, maddr, paddr,
>>>>>  						  size, PAGE_SHARED);
>>>>> +#else
>>>>> +	return xnarch_remap_kmem_page_range(vma, maddr, paddr,
>>>>> +					    size, PAGE_SHARED);
>>>>> +#endif /* CONFIG_MMU */
>>>>>  }
>>>>>
>>>>>  static struct file_operations rtdm_mmap_fops = {
>>>>>
>>>>>
>>>>> I.e. split the cases where MMU is absent from the one where MMU is there but we
>>>>> come from rtdm_iomap_to_user.
>>>> Makes no sense to me yet. With CONFIG_MMU we have 3 cases, not just two,
>>>> no? We have to use mmap_data->src_paddr to tell kmem_page apart from
>>>> io_page.
>>> That's what the patch I sent right after this one does.
>> Nope, vaddr can be NULL in both cases, only paddr is differentiating.
>>
>> This one should do what we need:
>>
>> Index: ksrc/skins/rtdm/drvlib.c
>> ===================================================================
>> --- ksrc/skins/rtdm/drvlib.c	(Revision 3594)
>> +++ ksrc/skins/rtdm/drvlib.c	(Arbeitskopie)
>> @@ -1739,8 +1739,12 @@ static int rtdm_mmap_buffer(struct file 
>>  		return 0;
>>  	} else
>>  #endif /* CONFIG_MMU */
>> +	if (mmap_data->src_paddr)
>>  		return xnarch_remap_io_page_range(vma, maddr, paddr,
>>  						  size, PAGE_SHARED);
>> +	else
>> +		return xnarch_remap_kmem_page_range(vma, maddr, paddr,
>> +						    size, PAGE_SHARED);
>>  }
>>  
>>  static struct file_operations rtdm_mmap_fops = {
>>
>>
> 
> Ok. So if that's fine with you, I think we should merge that because the current
> situation is error-prone.

Will do, patches for 2.3..trunk in stand-by for now. Do you have a
xnarch_remap_kmem_page_range definition at hand?

> 
> For the time being, I've defined a remap_kmem wrapper which mirrors the previous
> actions of the remap_io one, before I fixed the latter with the noncache
> protection bits. At least we should get the same behaviour than previously wrt
> to rtdm_mmap_buffer. This leaves some time to think about the kmem mapping modes
> without breaking the current situation, but they should be correct now.
> 

OK.

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 254 bytes --]

  reply	other threads:[~2008-03-16 17:54 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-16 15:25 [Xenomai-core] pgprot_noncached for io-remapping? Jan Kiszka
2008-03-16 15:41 ` Philippe Gerum
2008-03-16 15:52   ` Jan Kiszka
     [not found]     ` <47DD47F0.5020003@domain.hid>
2008-03-16 16:36       ` Jan Kiszka
2008-03-16 16:43         ` Philippe Gerum
2008-03-16 16:45           ` Philippe Gerum
2008-03-16 16:45           ` Philippe Gerum
2008-03-16 16:50           ` Jan Kiszka
2008-03-16 17:07             ` Philippe Gerum
2008-03-16 17:15               ` Jan Kiszka
2008-03-16 17:34                 ` Philippe Gerum
2008-03-16 17:54                   ` Jan Kiszka [this message]
2008-03-16 18:11                     ` Philippe Gerum

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=47DD5EEB.30609@domain.hid \
    --to=jan.kiszka@domain.hid \
    --cc=Xenomai-core@domain.hid \
    --cc=rpm@xenomai.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.