All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Ungerer <gregungerer@westnet.com.au>
To: Angelo Dureghello <angelo@sysam.it>,
	Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Linux/m68k <linux-m68k@vger.kernel.org>
Subject: Re: [PATCH] m68k: allow ColdFire m5441x parts to run with MMU enabled
Date: Mon, 4 Sep 2017 16:08:40 +1000	[thread overview]
Message-ID: <1f6469b9-9592-80bd-b635-4fafe8d46c19@westnet.com.au> (raw)
In-Reply-To: <72e95591-c47d-153c-693e-0bf7ad6bb535@sysam.it>

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

Hi Angelo,

I have attached a patch with a slightly different approach to
fixing this. Can you try this one out?

I have a feel for what is going on, based in particular on
the changes you made in 0002-m68k-fix-mmu-for-coldfire-mcf5441x.patch.
I see that the virt_node_shift and accessing pg_data_map when
not 0 based is going to be problematic with the code as it is.


On 02/09/17 08:08, Angelo Dureghello wrote:
> about my patch sent yesterday, unfortunately, i found btw
> at least 1 issue: the busybox "cd" doesn't change directory :)
> 
> / # cat /proc/vmallocinfo
> 0xd0006000-0xd000c000   24576 n_tty_open+0x16/0xae pages=2 vmalloc
> / # ls
> bin    etc    lib    mnt    proc   sbin   usr
> dev    home   media  opt    root   sys    var
> / # cd bin
> / # ls
> bin    etc    lib    mnt    proc   sbin   usr
> dev    home   media  opt    root   sys    var
> / # cat /proc/vm
> vmallocinfo  vmstat
> / # cat /proc/vm
> vmallocinfo  vmstat
> / # cat /proc/vmallocinfo
> 0xd0000000-0xd0006000   24576 unpurged vm_area
> 0xd0006000-0xd000c000   24576 n_tty_open+0x16/0xae pages=2 vmalloc
> 
> And after each "cd" attempt, another "unpurged" message is added.
> Removing MMU cd works as expected.

I setup a configuration with my 5475 where I moved the build
RAM base to be 32MB - so it was no longer 0 based. Then I could run
some tests to at least simulate what you have on the 54411. (The
only catch is my code could still access 0 and surrounding memory
addresses without faulting...)

Running with my attached patch I didn't see any odd behavior with
cd/ls like you see above.

Geert: interested if you have any thoughts on problems around
       virt_to_node_shift. Changing CONFIG_RAMBASE I don't think is
       going to resolve the problem in m68k_setup_node(). We access
       of the end of the array since it was divided up based on the
       size of the RAM, but we access it using an index derrived
       directly from the absolute address.


> On 01/09/2017 15:30, Geert Uytterhoeven wrote:
>> Hi Greg,
>>
>> On Fri, Sep 1, 2017 at 3:21 PM, Greg Ungerer <gregungerer@westnet.com.au> wrote:
>>> On 01/09/17 17:49, Geert Uytterhoeven wrote:
>>>> On Fri, Sep 1, 2017 at 12:38 AM, Angelo Dureghello <angelo@sysam.it>
>>>> wrote:
>>>>> did some additional study and tests.
>>>>>
>>>>> Actually i cannot find any simpler patch, i just adjusted it a
>>>>> bit. I believe this patch will work on your cpu with 0-based
>>>>> memoryas well.
>>>>> I attach it for your comments.
>>>>
>>>>
>>>> I think your issue is caused by arch/m68k/include/asm/page_offset.h:
>>>>
>>>>       #if defined(CONFIG_RAMBASE)
>>>>       #define PAGE_OFFSET_RAW         CONFIG_RAMBASE
>>>>       #elif defined(CONFIG_SUN3)
>>>>       #define PAGE_OFFSET_RAW         0x0E000000
>>>>       #else
>>>>       #define PAGE_OFFSET_RAW         0x00000000
>>>>       #endif
>>>>
>>>> and arch/m68k/Kconfig.machine:
>>>>
>>>> if !MMU || COLDFIRE
>>>>
>>>>       config RAMBASE
>>>>               hex "Address of the base of RAM"
>>>>               default "0"
>>>>
>>>> So on MC680[2346]0 with MMU (and ignoring Sun-3, which is special),
>>>> PAGE_OFFSET == PAGE_OFFSET_RAW == 0.
>>>>
>>>> On Greg's zero-based Coldfire with MMU, CONFIG_RAMBASE is zero, and thus
>>>> PAGE_OFFSET is also zero.
>>>>
>>>> On your board CONFIG_RAMBASE is non-zero, hence PAGE_OFFSET is also
>>>> non-zero,
>>>> and thus you have to compensate for that, cfr. your second patch.
>>>>
>>>> Does it work if you force PAGE_OFFSET_RAW to zero?
>>>>
>>>> If yes, we either need:
>>>>
>>>> --- a/arch/m68k/include/asm/page_offset.h
>>>> +++ b/arch/m68k/include/asm/page_offset.h
>>>> @@ -1,6 +1,6 @@
>>>>    /* This handles the memory map.. */
>>>>
>>>> -#if defined(CONFIG_RAMBASE)
>>>> +#if !defined(CONFIG_MMU)
>>>>    #define PAGE_OFFSET_RAW                CONFIG_RAMBASE
>>>>    #elif defined(CONFIG_SUN3)
>>>>    #define PAGE_OFFSET_RAW                0x0E000000
>>>>
> 
> I tested this patch, (removed mine) and kernel hangs somewhere silently at
> first init, i don't have the debug enabled now, but i suspect it still
> hangs at some initial "memset" since 0 area for kernel should
> be allocated before access.
> 
> Isn't PAGE_OFFSET the starting area for the virtual kernel address space ?
> At least so it seems to be for the famous 3G + 1G of x86.

Well, for the current working ColdFire with MMU that is the case.
The kernel virtual addresses start at 0...


> This is what i see at boot with my patch of yesterday:
> 
> [    0.000000] Virtual kernel memory layout:
> [    0.000000]     vector  : 0x40000000 - 0x40000400   (   1 KiB)
> [    0.000000]     kmap    : 0xe0000000 - 0xf0000000   ( 256 MiB)
> [    0.000000]     vmalloc : 0xd0000000 - 0xe0000000   ( 256 MiB)
> [    0.000000]     lowmem  : 0x40000000 - 0x48000000   ( 128 MiB)
> [    0.000000]       .init : 0x40196000 - 0x401d8000   ( 264 KiB)
> [    0.000000]       .text : 0x40001000 - 0x40131e70   (1220 KiB)
> [    0.000000]       .data : 0x40131e70 - 0x40193900   ( 391 KiB)
> [    0.000000]       .bss  : 0x401d86d8 - 0x401ec680   (  80 KiB)

For whatever it is worth this is what I see now on my debug setup:

Virtual kernel memory layout:
    vector  : 0x02000000 - 0x02000400   (   1 KiB)
    kmap    : 0xe0000000 - 0xf0000000   ( 256 MiB)
    vmalloc : 0xd0000000 - 0xe0000000   ( 256 MiB)
    lowmem  : 0x02000000 - 0x04000000   (  32 MiB)
      .init : 0x02288000 - 0x02296000   (  56 KiB)
      .text : 0x02020000 - 0x0221f270   (2045 KiB)
      .data : 0x0221f270 - 0x02284140   ( 404 KiB)
      .bss  : 0x022967a0 - 0x022ae60c   (  96 KiB)

Regards
Greg



>>>> or
>>>>
>>>> --- a/arch/m68k/Kconfig.machine
>>>> +++ b/arch/m68k/Kconfig.machine
>>>> @@ -325,6 +325,7 @@ comment "RAM configuration"
>>>>
>>>>    config RAMBASE
>>>>           hex "Address of the base of RAM"
>>>> +       depends on MMU
>>>
>>>
>>> Did you mean "depends on !MMU" here?
>>
>> Sorry, yes, depends on !MMU.
>>
>>>> depending on whether anything else in the Coldfire code needs RAMBASE.
>>>
>>> There are a couple of places we depend on CONFIG_RAMBASE even
>>> when running with the MMU enabled. Most importantly in setting
>>> the cachable regions in arch/m68k/include/asm/m54xxacr.h.
>>> So this is probably not going to work on its own.
>>
>> OK, as I already feared/expected...
>>
>>> But the first patch above should be ok. It should certainly work on
>>> my 0 address base 5475 ColdFire setup. Angelo can you try that one?
>>
>> Right.
>>
>> Gr{oetje,eeting}s,
>>
>>                          Geert
>>
>> -- 
>> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
>>
>> In personal conversations with technical people, I call myself a hacker. But
>> when I'm talking to journalists I just say "programmer" or something like that.
>>                                  -- Linus Torvalds
>> -- 
>> To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
> 
> Regards,
> Angelo
> 


[-- Attachment #2: cf-virt-node-shift.patch --]
[-- Type: text/x-patch, Size: 471 bytes --]

diff --git a/arch/m68k/mm/mcfmmu.c b/arch/m68k/mm/mcfmmu.c
index 87131cd..6e63d24 100644
--- a/arch/m68k/mm/mcfmmu.c
+++ b/arch/m68k/mm/mcfmmu.c
@@ -169,7 +187,7 @@ void __init cf_bootmem_alloc(void)
 	max_pfn = max_low_pfn = PFN_DOWN(_ramend);
 	high_memory = (void *)_ramend;
 
-	m68k_virt_to_node_shift = fls(_ramend - _rambase - 1) - 6;
+	m68k_virt_to_node_shift = fls(_ramend - 1) - 6;
 	module_fixup(NULL, __start_fixup, __stop_fixup);
 
 	/* setup bootmem data */

  reply	other threads:[~2017-09-04  6:08 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-14 23:21 Re:[PATCH] m68k: allow ColdFire m5441x parts to run with MMU enabled Angelo Dureghello
2017-07-14 23:47 ` [PATCH] " Angelo Dureghello
2017-08-09 13:04   ` Greg Ungerer
2017-08-09 15:32     ` Angelo Dureghello
2017-08-10  7:06       ` Greg Ungerer
2017-08-12 11:17         ` Angelo Dureghello
2017-08-14  4:16           ` Greg Ungerer
2017-08-17 15:02             ` Angelo Dureghello
2017-08-20 12:44               ` Greg Ungerer
2017-08-20 13:26                 ` Angelo Dureghello
2017-08-21  7:15                   ` Greg Ungerer
2017-08-21 14:58                     ` Angelo Dureghello
2017-08-21 20:11                       ` Geert Uytterhoeven
2017-08-22  0:15                         ` Angelo Dureghello
2017-08-22  0:35                     ` Angelo Dureghello
2017-08-22  1:08                       ` Greg Ungerer
2017-08-23  7:06                       ` Greg Ungerer
2017-08-27  0:31                         ` Angelo Dureghello
2017-08-31 22:38                           ` Angelo Dureghello
2017-09-01  7:49                             ` Geert Uytterhoeven
2017-09-01 13:21                               ` Greg Ungerer
2017-09-01 13:30                                 ` Geert Uytterhoeven
2017-09-01 22:08                                   ` Angelo Dureghello
2017-09-04  6:08                                     ` Greg Ungerer [this message]
2017-09-04 14:42                                       ` Angelo Dureghello
2017-09-07  2:01                                         ` Greg Ungerer
2017-09-07 20:23                                           ` Angelo Dureghello
2017-09-08  0:48                                             ` Greg Ungerer
2017-08-13  1:15         ` Angelo Dureghello
  -- strict thread matches above, loose matches on Subject: below --
2017-01-11 11:35 Greg Ungerer

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=1f6469b9-9592-80bd-b635-4fafe8d46c19@westnet.com.au \
    --to=gregungerer@westnet.com.au \
    --cc=angelo@sysam.it \
    --cc=geert@linux-m68k.org \
    --cc=linux-m68k@vger.kernel.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.