[yocto] [PATCH] mm/msync: tweak tmpfs patch for syscall msync

Bruce Ashfield bruce.ashfield at windriver.com
Wed Apr 25 18:15:12 PDT 2012


On 12-04-25 8:59 PM, Zumeng Chen wrote:
> That was my last version, you can google to get by "msync zumeng"
> So feel free to merge it.

Sounds good, but we should still get the header updates, since the
first version merged into the tree already.

Bruce

>
> Regards,
> Zumeng
> 于 2012年04月25日 21:47, Bruce Ashfield 写道:
>> On 12-04-25 06:06 AM, Kang Kai wrote:
>>> Commit 1c3ae5441 fixes MIPS CPU cache alias problem. But it makes
>>
>> Put a short log after the commit ID, that way we can read what the
>> old commit was trying to do right in this commit.
>>
>>> posix test cases mlockall/3-6 3-7 fail.
>>
>> Can we expand on what the test is doing ? That way the commit
>> header is stand alone. I know that I haven't memorized what all the
>> posix tests do :)
>>
>>> Tweak the patch to:
>>> 1 check the vma and its flags first
>>
>> Can you expand here as well. Do you really mean that you've moved
>> the CONFIG_TMPFS block down in the function so that the normal
>> vma flag checking will occur ?
>>
>>> 2 don't quit the function when meet first vma belongs to tmpfs file
>>
>> And for this part, can you (or Zumeng) explain why we used to need
>> to exit immediately and now we don't ?
>>
>> The patch looks good though, thanks for looking into this tricky
>> area of code.
>>
>> Cheers,
>>
>> Bruce
>>
>>>
>>> Signed-off-by: Kang Kai<kai.kang at windriver.com>
>>> ---
>>> mm/msync.c | 30 +++++++++++++-----------------
>>> 1 files changed, 13 insertions(+), 17 deletions(-)
>>>
>>> diff --git a/mm/msync.c b/mm/msync.c
>>> index ced6215..31cd311 100644
>>> --- a/mm/msync.c
>>> +++ b/mm/msync.c
>>> @@ -60,23 +60,6 @@ SYSCALL_DEFINE3(msync, unsigned long, start,
>>> size_t, len, int, flags)
>>> down_read(&mm->mmap_sem);
>>> vma = find_vma(mm, start);
>>>
>>> -#ifdef CONFIG_TMPFS
>>> - /*
>>> - * For tmpfs, no matter which flag(ASYNC or SYNC) gets from msync,
>>> - * there is not so much thing to do for CPUs without cache alias,
>>> - * But for some CPUs with cache alias, msync has to flush cache
>>> - * explicitly, which makes sure the data coherency between memory
>>> - * file and cache.
>>> - */
>>> - file = vma->vm_file;
>>> - if (file&& (file->f_op ==&shmem_file_operations)) {
>>> - if(CPU_HAS_CACHE_ALIAS)
>>> - flush_cache_range(vma, start, start+len);
>>> - error = 0;
>>> - goto out_unlock;
>>> - }
>>> -#endif
>>> -
>>> for (;;) {
>>>
>>> /* Still start< end. */
>>> @@ -97,6 +80,19 @@ SYSCALL_DEFINE3(msync, unsigned long, start,
>>> size_t, len, int, flags)
>>> goto out_unlock;
>>> }
>>> file = vma->vm_file;
>>> +#ifdef CONFIG_TMPFS
>>> + /*
>>> + * For tmpfs, no matter which flag(ASYNC or SYNC) gets from msync,
>>> + * there is not so much thing to do for CPUs without cache alias,
>>> + * But for some CPUs with cache alias, msync has to flush cache
>>> + * explicitly, which makes sure the data coherency between memory
>>> + * file and cache.
>>> + */
>>> + if (file&& (file->f_op ==&shmem_file_operations)) {
>>> + if(CPU_HAS_CACHE_ALIAS)
>>> + flush_cache_range(vma, start, start+len);
>>> + }
>>> +#endif
>>> start = vma->vm_end;
>>> if ((flags& MS_SYNC)&& file&&
>>> (vma->vm_flags& VM_SHARED)) {
>>
>




More information about the yocto mailing list