diff mbox series

sh: pgtable-3level: Fix cast to pointer from integer of different size

Message ID 2c2eef3c9a2f57e5609100a4864715ccf253d30f.1631713483.git.geert+renesas@glider.be (mailing list archive)
State New, archived
Headers show
Series sh: pgtable-3level: Fix cast to pointer from integer of different size | expand

Commit Message

Geert Uytterhoeven Sept. 15, 2021, 1:50 p.m. UTC
If X2TLB=y (CPU_SHX2=y or CPU_SHX3=y, e.g. migor_defconfig), pgd_t.pgd
is "unsigned long long", causing:

    In file included from arch/sh/include/asm/pgtable.h:13,
		     from include/linux/pgtable.h:6,
		     from include/linux/mm.h:33,
		     from arch/sh/kernel/asm-offsets.c:14:
    arch/sh/include/asm/pgtable-3level.h: In function ‘pud_pgtable’:
    arch/sh/include/asm/pgtable-3level.h:37:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
       37 |  return (pmd_t *)pud_val(pud);
	  |         ^

Fix this by adding an intermediate cast to "unsigned long", which is
basically what the old code did before.

Fixes: 9cf6fa2458443118 ("mm: rename pud_page_vaddr to pud_pgtable and make it return pmd_t *")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
Compile-tested only, as the remote Migo-R is MIA.
Anyone with e.g. a Migo-R or Ecovec to boot-test?
The truncation to "unsigned long" has been there since forever, so
probably it still works fine ;-)

... once the other build issues are fixed.
---
 arch/sh/include/asm/pgtable-3level.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Daniel Palmer Sept. 15, 2021, 1:58 p.m. UTC | #1
Hi Geert,

On Wed, 15 Sept 2021 at 22:52, Geert Uytterhoeven
<geert+renesas@glider.be> wrote:
> Compile-tested only, as the remote Migo-R is MIA.
> Anyone with e.g. a Migo-R or Ecovec to boot-test?

Yes. It's 11pm here right now so I'll do it tomorrow and get back to you.

Cheers,

Daniel
Daniel Palmer Sept. 16, 2021, 12:06 p.m. UTC | #2
On Wed, 15 Sept 2021 at 22:52, Geert Uytterhoeven
<geert+renesas@glider.be> wrote:
> Anyone with e.g. a Migo-R or Ecovec to boot-test?

Tested-by: Daniel Palmer <daniel@thingy.jp>

--- Massive boot log from an ecovec ---

Bytes transferred = 25788416 (1898000 hex)
## Booting kernel from Legacy Image at 89000000 ...
  Image Name:   Linux-5.15.0-rc1
  Image Type:   SuperH Linux Kernel Image (gzip compressed)
  Data Size:    3175191 Bytes =  3 MB
  Load Address: 88001000
  Entry Point:  88002000
  Verifying Checksum ... OK
  Uncompressing Kernel Image ... OK
Linux version 5.15.0-rc1 (daniel@shiro)
(sh4-buildroot-linux-gnu-gcc.br_real (Buildroot
2021.02-715-g5e3799213236) 10.3.0, GNU ld (GNU Binutils) 2.36.1) #6
Thu Sep 16 21
Boot params:
... MOUNT_ROOT_RDONLY - 00000000
... RAMDISK_FLAGS     - 00000000
... ORIG_ROOT_DEV     - 00000000
... LOADER_TYPE       - 00000000
... INITRD_START      - 00000000
... INITRD_SIZE       - 00000000
Memory limited to 248MB
Booting machvec: R0P7724 (EcoVec)
initrd disabled
Zone ranges:
 Normal   [mem 0x0000000008000000-0x00000000177fffff]
Movable zone start for each node
Early memory node ranges
 node   0: [mem 0x0000000008000000-0x00000000177fffff]
Initmem setup node 0 [mem 0x0000000008000000-0x00000000177fffff]
Built 1 zonelists, mobility grouping on.  Total pages: 62930
Kernel command line: console=tty0, console=ttySC0,115200
phram.phram=rootfs,0x8a000000,32Mi memmap=32M$0x8a000000
root=/dev/mmcblk0 ro rootwait mem=248M memchunk.vpu=8mm
Unknown command line parameters: memmap=32M$0x8a000000
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
Sorting __ex_table...
mem auto-init: stack:off, heap alloc:off, heap free:off
PVR=10300b00 CVR=7144040d PRR=00002200
I-cache : n_ways=4 n_sets=256 way_incr=8192
I-cache : entry_mask=0x00001fe0 alias_mask=0x00001000 n_aliases=2
D-cache : n_ways=4 n_sets=256 way_incr=8192
D-cache : entry_mask=0x00001fe0 alias_mask=0x00001000 n_aliases=2
S-cache : n_ways=4 n_sets=2048 way_incr=65536
S-cache : entry_mask=0x0000ffe0 alias_mask=0x0000f000 n_aliases=16
virtual kernel memory layout:
   fixmap  : 0xdffd7000 - 0xdffff000   ( 160 kB)
   vmalloc : 0xc0000000 - 0xdffd5000   ( 511 MB)
   lowmem  : 0x88000000 - 0x97800000   ( 248 MB) (cached)
           : 0xa0000000 - 0xc0000000   ( 512 MB) (uncached)
     .init : 0x884eb000 - 0x8850a000   ( 124 kB)
     .data : 0x883ab8e8 - 0x884ea3ec   (1274 kB)
     .text : 0x88001000 - 0x883ab8e8   (3754 kB)
Memory: 246224K/253952K available (3750K kernel code, 266K rwdata,
1004K rodata, 124K init, 89K bss, 7724K reserved, 0K cma-reserved)
SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
NR_IRQS: 8, nr_irqs: 8, preallocated irqs: 0
intc: Registered controller 'sh7724' with 83 IRQs
random: get_random_bytes called from start_kernel+0x3d6/0x740 with crng_init=0
Console: colour dummy device 80x25
printk: console [tty0] enabled
sh-cmt-32.0: ch0: used for clock events
sh-cmt-32.0: ch0: used for periodic clock events
sh-cmt-32.0: ch0: used as clock source
clocksource: sh-cmt-32.0: mask: 0xffffffff max_cycles: 0xffffffff,
max_idle_ns: 466616319891357 ns
sh-tmu.0: ch0: used for clock events
sh-tmu.0: ch0: used for periodic clock events
sh-tmu.0: ch1: used as clock source
clocksource: sh-tmu.0: mask: 0xffffffff max_cycles: 0xffffffff,
max_idle_ns: 183481014613 ns
sched_clock: 32 bits at 250 Hz, resolution 4000000ns, wraps every
8589934590000000ns
Calibrating delay loop (skipped)... 499.99 BogoMIPS PRESET (lpj=999999)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
CPU: SH7724
Performance Events: sh4a support registered
devtmpfs: initialized
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff,
max_idle_ns: 7645041785100000 ns
futex hash table entries: 256 (order: -1, 3072 bytes, linear)
pinctrl core: initialized pinctrl subsystem
NET: Registered PF_NETLINK/PF_ROUTE protocol family
DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations
vpu: forcing memory chunk size to 0x00800000
veu0: forcing memory chunk size to 0x00400000
sh-pfc pfc-sh7724: sh7724_pfc handling gpio 0 -> 179
sh-pfc pfc-sh7724: sh7724_pfc handling gpio 180 -> 486
sh-pfc pfc-sh7724: sh7724_pfc support registered
HW Breakpoints: SH-4A UBC support registered
sh-pfc pfc-sh7724: Use of GPIO API for function requests is
deprecated, convert to pinctrl
USB1 function is selected
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
mc: Linux media interface: v0.10
videodev: Linux video capture interface: v2.00
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti
<giometti@linux.it>
PTP clock support registered
sh_cmt sh-cmt-32.0: kept as earlytimer
sh_tmu sh-tmu.0: kept as earlytimer
sh_tmu sh-tmu.1: ch0: used for clock events
sh_tmu sh-tmu.1: ch1: used as clock source
clocksource: sh-tmu.1: mask: 0xffffffff max_cycles: 0xffffffff,
max_idle_ns: 183481014613 ns
Advanced Linux Sound Architecture Driver Initialized.
clocksource: Switched to clocksource sh-tmu.0
sh_tmu sh-tmu.0: ch0: used for oneshot clock events
NET: Registered PF_INET protocol family
IP idents hash table entries: 4096 (order: 3, 32768 bytes, linear)
tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
TCP established hash table entries: 2048 (order: 1, 8192 bytes, linear)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes, linear)
TCP: Hash tables configured (established 2048 bind 2048)
UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
sq: Registering store queue API.
unable to read sh_eth MAC address
workingset: timestamp_bits=14 max_order=16 bucket_order=2
squashfs: version 4.0 (2009/01/31) Phillip Lougher
Console: switching to colour frame buffer device 100x30
sh_mobile_lcdc_fb sh_mobile_lcdc_fb.0: registered
sh_mobile_lcdc_fb.0/mainlcd as 800x480 16bpp.
SuperH (H)SCI(F) driver initialized
sh-sci.0: ttySC0 at MMIO 0xffe00000 (irq = 80, base_baud = 0) is a scif
printk: console [ttySC0] enabled
sh-sci.1: ttySC1 at MMIO 0xffe10000 (irq = 81, base_baud = 0) is a scif
sh-sci.2: ttySC2 at MMIO 0xffe20000 (irq = 82, base_baud = 0) is a scif
sh-sci.3: ttySC3 at MMIO 0xa4e30000 (irq = 56, base_baud = 0) is a scifa
sh-sci.4: ttySC4 at MMIO 0xa4e40000 (irq = 88, base_baud = 0) is a scifa
sh-sci.5: ttySC5 at MMIO 0xa4e50000 (irq = 109, base_baud = 0) is a scifa
physmap-flash physmap-flash.0: physmap platform flash device: [mem
0x00000000-0x03ffffff]
physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank.
Manufacturer ID 0x000001 Chip ID 0x002301
Amd/Fujitsu Extended Query Table at 0x0040
 Amd/Fujitsu Extended Query version 1.3.
number of CFI chips: 1
Creating 2 MTD partitions on "physmap-flash.0":
0x000000000000-0x000000500000 : "boot loader"
0x000000500000-0x000004000000 : "free-area"
phram: rootfs device: 0x2000000 at 0x8a000000 for erasesize 0x1000
SMSC LAN8700: probe of sh7724-ether-0:1f failed with error -22
libphy: sh_mii: probed
sh-eth sh7724-ether.0 eth0: Base address at 0xa4600000,
00:00:87:6c:1d:c2, IRQ 91.
r8a66597_hcd r8a66597_hcd.0: USB Host Controller
r8a66597_hcd r8a66597_hcd.0: new USB bus registered, assigned bus number 1
r8a66597_hcd r8a66597_hcd.0: irq 65, io base 0xa4d80000
usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.15
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: USB Host Controller
usb usb1: Manufacturer: Linux 5.15.0-rc1 r8a66597_hcd
usb usb1: SerialNumber: r8a66597_hcd
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
sh-rtc sh-rtc: registered as rtc0
sh-rtc sh-rtc: hctosys: unable to read the hardware clock
renesas-ceu renesas-ceu.0: Renesas Capture Engine Unit renesas-ceu.0
renesas-ceu renesas-ceu.1: Renesas Capture Engine Unit renesas-ceu.1
cpufreq: SuperH CPU frequency driver.
cpufreq: cpufreq_online: ->get() failed
sh_mmcif sh_mmcif.0: Platform OCR mask is ignored
heartbeat: version 0.1.2 loaded
ALSA device list:
 No soundcards found.
sh_mmcif sh_mmcif.0: Chip version 0x0000, clock rate 83MHz
sh_mobile_sdhi sh_mobile_sdhi.0: mmc0 base at 0x04ce0000, max clock rate 83 MHz
Waiting for root device /dev/mmcblk0...
random: fast init done
usb 1-1: new full-speed USB device number 2 using r8a66597_hcd
mmc0: new SDHC card at address fb83
mmcblk0: mmc0:fb83 SE08G 7.22 GiB
VFS: Mounted root (squashfs filesystem) readonly on device 179:0.
devtmpfs: mounted
Freeing unused kernel image (initmem) memory: 124K
This architecture does not have kernel memory protection.
Run /sbin/init as init process
usb 1-1: New USB device found, idVendor=10c4, idProduct=ea60, bcdDevice= 1.00
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-1: Product: CP2102 USB to UART Bridge Controller
usb 1-1: Manufacturer: Silicon Labs
usb 1-1: SerialNumber: 0001
NET: Registered PF_UNIX/PF_LOCAL protocol family
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Starting mdev... OK
usbcore: registered new interface driver cp210x
usbserial: USB Serial support registered for cp210x
cp210x 1-1:1.0: cp210x converter detected
usb 1-1: cp210x converter now attached to ttyUSB0
Saving random seed: SKIP (read-only file system detected)
Starting haveged: haveged: command socket is listening at fd 3
OK
Starting network: Generic PHY sh7724-ether-0:1f: attached PHY driver
(mii_bus:phy_addr=sh7724-ether-0:1f, irq=POLL)
sh-eth sh7724-ether.0 eth0: Link is Up - 100Mbps/Full - flow control off
udhcpc: started, v1.33.0
NET: Registered PF_PACKET protocol family
udhcpc: sending discover
udhcpc: sending select for 192.168.3.251
udhcpc: lease of 192.168.3.251 obtained, lease time 3600
deleting routers
adding dns 192.168.3.1
adding dns 192.168.3.2
OK
Starting openntpd: -s option no longer works and will be removed soon.
Please reconfigure to use constraints or trusted servers.
constraint configured without libtls support
constraint configured without libtls support
constraint configured without libtls support
OK
No persistent location to store SSH host keys. New keys will be
generated at each boot. Are you sure this is what you want to do?
Starting dropbear sshd: NET: Registered PF_INET6 protocol family
Segment Routing with IPv6
In-situ OAM (IOAM) with IPv6
OK
Starting nodectrl: OK
Starting tlwbe_heartbeat: random: python3: uninitialized urandom read
(24 bytes read)
random: crng init done
CN12 SD/MMC Vdd: incomplete constraints, leaving on
OK

Welcome to Buildroot
ecovec24 login: sh4life
$ cat /proc/cpuinfo
machine         : R0P7724 (EcoVec)
processor       : 0
cpu family      : sh4a
cpu type        : SH7724
cut             : 11.x
cpu flags       : fpu perfctr llsc l2
cache type      : split (harvard)
icache size     : 32KiB (4-way)
dcache size     : 32KiB (4-way)
scache size     : 256KiB (4-way)
address sizes   : 29 bits physical
bogomips        : 499.99
$
Rob Landley Sept. 17, 2021, 1:32 a.m. UTC | #3
On 9/15/21 8:50 AM, Geert Uytterhoeven wrote:
>     arch/sh/include/asm/pgtable-3level.h:37:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
...
> The truncation to "unsigned long" has been there since forever, so
> probably it still works fine ;-)

1) Linux is LP64 so sizeof(long) and sizeof(pointer) always match, so it's not
truncating.

2) The sh5 only ever shipped evaluation units, it never had a production run,
and we haven't implemented j64 yet, so all superh targets are currently 32 bit.
(I.E. it's complaining about _expanding_ the pointer, which shouldn't be a
problem as long as endianness is respected.)

Rob
Geert Uytterhoeven Sept. 17, 2021, 9:21 a.m. UTC | #4
Hi Rob,

On Fri, Sep 17, 2021 at 3:12 AM Rob Landley <rob@landley.net> wrote:
> On 9/15/21 8:50 AM, Geert Uytterhoeven wrote:
> >     arch/sh/include/asm/pgtable-3level.h:37:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
> ...
> > The truncation to "unsigned long" has been there since forever, so
> > probably it still works fine ;-)
>
> 1) Linux is LP64 so sizeof(long) and sizeof(pointer) always match, so it's not
> truncating.
>
> 2) The sh5 only ever shipped evaluation units, it never had a production run,
> and we haven't implemented j64 yet, so all superh targets are currently 32 bit.
> (I.E. it's complaining about _expanding_ the pointer, which shouldn't be a
> problem as long as endianness is respected.)

The build error is for 32-bit.
If CONFIG_X2TLB=y, pgd_t.pgd is "unsigned long long", i.e. 64-bit, so
casting it to a pointer needs an intermediate cast to "unsigned long".
See arch/sh/include/asm/page.h:

#ifdef CONFIG_X2TLB
typedef struct { unsigned long pte_low, pte_high; } pte_t;
typedef struct { unsigned long long pgprot; } pgprot_t;
typedef struct { unsigned long long pgd; } pgd_t;
#define pte_val(x) \
        ((x).pte_low | ((unsigned long long)(x).pte_high << 32))
#define __pte(x) \
        ({ pte_t __pte = {(x), ((unsigned long long)(x)) >> 32}; __pte; })
#else
typedef struct { unsigned long pte_low; } pte_t;
typedef struct { unsigned long pgprot; } pgprot_t;
typedef struct { unsigned long pgd; } pgd_t;
#define pte_val(x)      ((x).pte_low)
#define __pte(x)        ((pte_t) { (x) } )
#endif

Gr{oetje,eeting}s,

                        Geert
Rob Landley Sept. 18, 2021, 5:04 a.m. UTC | #5
On 9/17/21 4:21 AM, Geert Uytterhoeven wrote:
> Hi Rob,
> 
> On Fri, Sep 17, 2021 at 3:12 AM Rob Landley <rob@landley.net> wrote:
>> On 9/15/21 8:50 AM, Geert Uytterhoeven wrote:
>> >     arch/sh/include/asm/pgtable-3level.h:37:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
>> ...
>> > The truncation to "unsigned long" has been there since forever, so
>> > probably it still works fine ;-)
>>
>> 1) Linux is LP64 so sizeof(long) and sizeof(pointer) always match, so it's not
>> truncating.
>>
>> 2) The sh5 only ever shipped evaluation units, it never had a production run,
>> and we haven't implemented j64 yet, so all superh targets are currently 32 bit.
>> (I.E. it's complaining about _expanding_ the pointer, which shouldn't be a
>> problem as long as endianness is respected.)
> 
> The build error is for 32-bit.

I know. I'm just saying your fix doesn't seem wrong. (Personally I would have
just cast once to (void *) and let C not being C++ do the right thing, but eh...)

Not sure I understand the point of the original code though. Under what
conditions do you want 64 bit page tables on a 32 bit system? (Some PAE variant?)

> If CONFIG_X2TLB=y, pgd_t.pgd is "unsigned long long", i.e. 64-bit, so
> casting it to a pointer needs an intermediate cast to "unsigned long".
> See arch/sh/include/asm/page.h:

I can't find a user of it. None of the existing defconfigs select this option:

  $ grep -r X2TLB arch/sh/configs

And it's weird in other ways, like 8k page size. (Why...?)

Google finds sh-x2 mentioned in Renesas' sh4a debugger docs, but I've never
played with the renesas "a" variants. The stuff I'm familiar with is all
following up on what Hitachi did, not Renesas.

*shrug* You fix looks good enough to me.

Acked-by: Rob Landley <rob@landley.net>

Rob
Geert Uytterhoeven Sept. 18, 2021, 11:20 a.m. UTC | #6
Hi Rob,

On Sat, Sep 18, 2021 at 6:45 AM Rob Landley <rob@landley.net> wrote:
> On 9/17/21 4:21 AM, Geert Uytterhoeven wrote:
> > On Fri, Sep 17, 2021 at 3:12 AM Rob Landley <rob@landley.net> wrote:
> >> On 9/15/21 8:50 AM, Geert Uytterhoeven wrote:
> >> >     arch/sh/include/asm/pgtable-3level.h:37:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
> >> ...
> >> > The truncation to "unsigned long" has been there since forever, so
> >> > probably it still works fine ;-)
> >>
> >> 1) Linux is LP64 so sizeof(long) and sizeof(pointer) always match, so it's not
> >> truncating.
> >>
> >> 2) The sh5 only ever shipped evaluation units, it never had a production run,
> >> and we haven't implemented j64 yet, so all superh targets are currently 32 bit.
> >> (I.E. it's complaining about _expanding_ the pointer, which shouldn't be a
> >> problem as long as endianness is respected.)
> >
> > The build error is for 32-bit.
>
> I know. I'm just saying your fix doesn't seem wrong. (Personally I would have
> just cast once to (void *) and let C not being C++ do the right thing, but eh...)

That would still give a warning, as "unsigned long long" us 64-bit, and
"void *" is 32-bit.

> Not sure I understand the point of the original code though. Under what
> conditions do you want 64 bit page tables on a 32 bit system? (Some PAE variant?)
>
> > If CONFIG_X2TLB=y, pgd_t.pgd is "unsigned long long", i.e. 64-bit, so
> > casting it to a pointer needs an intermediate cast to "unsigned long".
> > See arch/sh/include/asm/page.h:
>
> I can't find a user of it. None of the existing defconfigs select this option:
>
>   $ grep -r X2TLB arch/sh/configs

Note that these are reduced config files, so auto-selected symbols are
not present in the defconfig.

config X2TLB
        def_bool y
        depends on (CPU_SHX2 || CPU_SHX3) && MMU

and e.g.

config CPU_SUBTYPE_SH7723
        bool "Support SH7723 processor"
        select CPU_SH4A
        select CPU_SHX2

>
> And it's weird in other ways, like 8k page size. (Why...?)
>
> Google finds sh-x2 mentioned in Renesas' sh4a debugger docs, but I've never
> played with the renesas "a" variants. The stuff I'm familiar with is all
> following up on what Hitachi did, not Renesas.
>
> *shrug* You fix looks good enough to me.
>
> Acked-by: Rob Landley <rob@landley.net>

Thanks!

Gr{oetje,eeting}s,

                        Geert
John Paul Adrian Glaubitz Sept. 23, 2021, 3:20 p.m. UTC | #7
Hi Geert!

On 9/15/21 15:50, Geert Uytterhoeven wrote:
> If X2TLB=y (CPU_SHX2=y or CPU_SHX3=y, e.g. migor_defconfig), pgd_t.pgd
> is "unsigned long long", causing:
> 
>     In file included from arch/sh/include/asm/pgtable.h:13,
> 		     from include/linux/pgtable.h:6,
> 		     from include/linux/mm.h:33,
> 		     from arch/sh/kernel/asm-offsets.c:14:
>     arch/sh/include/asm/pgtable-3level.h: In function ‘pud_pgtable’:
>     arch/sh/include/asm/pgtable-3level.h:37:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
>        37 |  return (pmd_t *)pud_val(pud);
> 	  |         ^
> 
> Fix this by adding an intermediate cast to "unsigned long", which is
> basically what the old code did before.

Thanks a lot for fixing this. My SH kernel build becomes much less noisy with
your patch. I can also confirm that it doesn't break the boot on my SH-7785LCR
as expected.

Tested-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>

Adrian
diff mbox series

Patch

diff --git a/arch/sh/include/asm/pgtable-3level.h b/arch/sh/include/asm/pgtable-3level.h
index 56bf35c2f29c2b83..cdced80a7ffa3944 100644
--- a/arch/sh/include/asm/pgtable-3level.h
+++ b/arch/sh/include/asm/pgtable-3level.h
@@ -34,7 +34,7 @@  typedef struct { unsigned long long pmd; } pmd_t;
 
 static inline pmd_t *pud_pgtable(pud_t pud)
 {
-	return (pmd_t *)pud_val(pud);
+	return (pmd_t *)(unsigned long)pud_val(pud);
 }
 
 /* only used by the stubbed out hugetlb gup code, should never be called */