Kernel 4.7: PAGE_GUARDED and _PAGE_NO_CACHE

Julian Margetson runaway at candw.ms
Mon Jun 6 11:23:49 AEST 2016


On 6/5/2016 8:57 PM, Michael Ellerman wrote:
> On Sun, 2016-06-05 at 18:09 +0200, Christian Zigotzky wrote:
>
>> All,
>>
>> I need an answer because I think Darren's guess is correct. It isn't a
>> problem in the pci code. I replaced the file head_64.S that Darren
>> mentioned with the one from the kernel 4.6 and it compiled but
>> unfortunately it doesn't boot. We know "head_64.S" is one file for the
>> early boot phase but I think there are some other files.
> There's lots of files used in the early boot, you can't revert individual files
> and expect it to work.
>
>> On 28 May 2016 at 8:51 PM, Darren Stevens wrote:
>>> You can see from this that the 4.7 kernel hangs right after the booting linux
>>> via __start(), whereas in the 4.4 there's about 29 lines of output before it
>>> gets to the Initialised io_base_virt printk in our patch.
> If the last thing you see is "booting linux via __start()" that means the kernel
> crashed early, before it could detect and initialise the console.
>
> Do you have a serial or other console in that machine at a known location? If so
> you can hard-code the kernel to use that console, which means you can get
> messages earlier in boot. See udbg_early_init() for starters.
>
> cheers
>
>
>
> Julian Margetson <runaway at candw.ms> writes:
>
>> Hi Christian,
>>
>> I am also having a problem with _PAGE_NO_CACHE on Sam460ex.
>>
>> Regards
>> Julian
>>
>> drivers/gpu/drm/drm_vm.c: In function ‘drm_dma_prot’:
>> drivers/gpu/drm/drm_vm.c:83:6: error: invalid operands to binary | 
>> (have ‘pgprot_t {aka struct <anonymous>}’ and ‘int’)
>>     tmp |= _PAGE_NO_CACHE;
>>         ^
>> scripts/Makefile.build:289: recipe for target 
>> 'drivers/gpu/drm/drm_vm.o' failed
>> make[3]: *** [drivers/gpu/drm/drm_vm.o] Error 1
>> scripts/Makefile.build:440: recipe for target 'drivers/gpu/drm' failed
>> make[2]: *** [drivers/gpu/drm] Error 2
>> scripts/Makefile.build:440: recipe for target 'drivers/gpu' failed
>> make[1]: *** [drivers/gpu] Error 2
>> Makefile:985: recipe for target 'drivers' failed
>> make: *** [drivers] Error 2
>>
>>
> That is because that usage is wrong based on type. _PAGE_NO_CACHE is not
> of type pgprot_t. What you really need there is
>
> tmp = __pgprot(pgprot_val(tmp) | _PAGE_NO_CACHE);
>
> or a better option would be
>
> tmp = pgprot_noncached_wc(tmp);
>
> -aneesh
>
> @Julian
>
> What about the issues with the Sam460ex? Have you solved the problem 
> with the commit powerpc-4.7-1?
>
> Cheers,
>
> Christian
>
> On 04 June 2016 at 5:25 PM, Christian Zigotzky wrote:
>

tmp = pgprot_noncached_wc(tmp);

compiles but  I then run in to the following

  CC      drivers/gpu/drm/drm_scatter.o
drivers/gpu/drm/drm_scatter.c: In function ‘drm_vmalloc_dma’:
drivers/gpu/drm/drm_scatter.c:44:49: error: invalid operands to binary | 
(have ‘pgprot_t {aka struct <anonymous>}’ and ‘int’)
   return __vmalloc(size, GFP_KERNEL, PAGE_KERNEL | _PAGE_NO_CACHE);
                                                  ^
drivers/gpu/drm/drm_scatter.c:48:1: warning: control reaches end of 
non-void function [-Wreturn-type]
  }
  ^
scripts/Makefile.build:289: recipe for target 
'drivers/gpu/drm/drm_scatter.o' failed
make[3]: *** [drivers/gpu/drm/drm_scatter.o] Error 1
scripts/Makefile.build:440: recipe for target 'drivers/gpu/drm' failed
make[2]: *** [drivers/gpu/drm] Error 2
scripts/Makefile.build:440: recipe for target 'drivers/gpu' failed
make[1]: *** [drivers/gpu] Error 2
Makefile:985: recipe for target 'drivers' failed
make: *** [drivers] Error 2

Regards

Julian




More information about the Linuxppc-dev mailing list