* [PATCH 1/2] SH: Add missing casts in integer-pointer conversions
@ 2014-08-18 11:00 David Howells
2014-08-18 11:01 ` [PATCH 2/2] SH: Fix compilation errors in SH64 signal handling code David Howells
0 siblings, 1 reply; 2+ messages in thread
From: David Howells @ 2014-08-18 11:00 UTC (permalink / raw)
To: torvalds; +Cc: dhowells, apkm, linux-kernel, linux-sh
When casting between ints that aren't long or unsigned longs and pointers,
there needs to be an intermediate cast of long or unsigned long, eg:
void *p;
int i = (int)(unsigned long)p;
and:
unsigned long long i;
void *p = (void *)(unsigned long)i;
as the compiler only considers pointers to be the same logical size as long -
even if long is physically the same size as int or long long.
Signed-off-by: David Howells <dhowells@redhat.com>
---
arch/sh/kernel/io.c | 4 ++--
arch/sh/kernel/traps_64.c | 16 ++++++++++------
arch/sh/mm/cache-sh5.c | 4 ++--
drivers/sh/clk/core.c | 2 +-
drivers/sh/clk/cpg.c | 6 +++---
drivers/sh/intc/core.c | 6 +++---
6 files changed, 21 insertions(+), 17 deletions(-)
diff --git a/arch/sh/kernel/io.c b/arch/sh/kernel/io.c
index 5c51b794ba2a..ada61e5c1947 100644
--- a/arch/sh/kernel/io.c
+++ b/arch/sh/kernel/io.c
@@ -58,7 +58,7 @@ void memcpy_fromio(void *to, const volatile void __iomem *from, unsigned long co
}
#endif
- if ((((u32)to | (u32)from) & 0x3) == 0) {
+ if ((((u32)(unsigned long)to | (u32)(unsigned long)from) & 0x3) == 0) {
for (; count > 3; count -= 4) {
*(u32 *)to = *(volatile u32 *)from;
to += 4;
@@ -81,7 +81,7 @@ EXPORT_SYMBOL(memcpy_fromio);
*/
void memcpy_toio(volatile void __iomem *to, const void *from, unsigned long count)
{
- if ((((u32)to | (u32)from) & 0x3) == 0) {
+ if ((((u32)(unsigned long)to | (u32)(unsigned long)from) & 0x3) == 0) {
for ( ; count > 3; count -= 4) {
*(volatile u32 *)to = *(u32 *)from;
to += 4;
diff --git a/arch/sh/kernel/traps_64.c b/arch/sh/kernel/traps_64.c
index 112ea11c030d..eed747fc13c4 100644
--- a/arch/sh/kernel/traps_64.c
+++ b/arch/sh/kernel/traps_64.c
@@ -138,7 +138,7 @@ static void misaligned_kernel_word_load(__u64 address, int do_sign_extend, __u64
{
unsigned short x;
unsigned char *p, *q;
- p = (unsigned char *) (int) address;
+ p = (unsigned char *)(unsigned long)address;
q = (unsigned char *) &x;
q[0] = p[0];
q[1] = p[1];
@@ -154,7 +154,7 @@ static void misaligned_kernel_word_store(__u64 address, __u64 value)
{
unsigned short x;
unsigned char *p, *q;
- p = (unsigned char *) (int) address;
+ p = (unsigned char *)(unsigned long)address;
q = (unsigned char *) &x;
x = (__u16) value;
@@ -186,7 +186,8 @@ static int misaligned_load(struct pt_regs *regs,
return -1;
}
- if (__copy_user(&buffer, (const void *)(int)address, (1 << width_shift)) > 0) {
+ if (__copy_user(&buffer, (const void *)(unsigned long)address,
+ (1 << width_shift)) > 0) {
return -1; /* fault */
}
switch (width_shift) {
@@ -276,7 +277,8 @@ static int misaligned_store(struct pt_regs *regs,
break;
}
- if (__copy_user((void *)(int)address, &buffer, (1 << width_shift)) > 0) {
+ if (__copy_user((void *)(unsigned long)address, &buffer,
+ (1 << width_shift)) > 0) {
return -1; /* fault */
}
} else {
@@ -333,7 +335,8 @@ static int misaligned_fpu_load(struct pt_regs *regs,
return -1;
}
- if (__copy_user(&buffer, (const void *)(int)address, (1 << width_shift)) > 0) {
+ if (__copy_user(&buffer, (const void *)(unsigned long)address,
+ (1 << width_shift)) > 0) {
return -1; /* fault */
}
/* 'current' may be the current owner of the FPU state, so
@@ -443,7 +446,8 @@ static int misaligned_fpu_store(struct pt_regs *regs,
*(__u32*) &buffer = buflo;
*(1 + (__u32*) &buffer) = bufhi;
- if (__copy_user((void *)(int)address, &buffer, (1 << width_shift)) > 0) {
+ if (__copy_user((void *)(unsigned long)address, &buffer,
+ (1 << width_shift)) > 0) {
return -1; /* fault */
}
return 0;
diff --git a/arch/sh/mm/cache-sh5.c b/arch/sh/mm/cache-sh5.c
index d1bffbcd9d52..0a3aeecbfd62 100644
--- a/arch/sh/mm/cache-sh5.c
+++ b/arch/sh/mm/cache-sh5.c
@@ -245,14 +245,14 @@ static void inline sh64_dcache_purge_sets(int sets_to_purge_base, int n_sets)
int j;
int set_offset;
- dummy_buffer_base_set = ((int)&dummy_alloco_area &
+ dummy_buffer_base_set = ((unsigned long)&dummy_alloco_area &
cpu_data->dcache.entry_mask) >>
cpu_data->dcache.entry_shift;
set_offset = sets_to_purge_base - dummy_buffer_base_set;
for (j = 0; j < n_sets; j++, set_offset++) {
set_offset &= (cpu_data->dcache.sets - 1);
- eaddr0 = (unsigned long long)dummy_alloco_area +
+ eaddr0 = (unsigned long long)(unsigned long)dummy_alloco_area +
(set_offset << cpu_data->dcache.entry_shift);
/*
diff --git a/drivers/sh/clk/core.c b/drivers/sh/clk/core.c
index be56b22ca941..1dc9af717cb3 100644
--- a/drivers/sh/clk/core.c
+++ b/drivers/sh/clk/core.c
@@ -380,7 +380,7 @@ static int clk_establish_mapping(struct clk *clk)
clk->mapping = mapping;
out:
clk->mapped_reg = clk->mapping->base;
- clk->mapped_reg += (phys_addr_t)clk->enable_reg - clk->mapping->phys;
+ clk->mapped_reg += (phys_addr_t)(unsigned long)clk->enable_reg - clk->mapping->phys;
return 0;
}
diff --git a/drivers/sh/clk/cpg.c b/drivers/sh/clk/cpg.c
index 7442bc130055..d23de0a9eb6a 100644
--- a/drivers/sh/clk/cpg.c
+++ b/drivers/sh/clk/cpg.c
@@ -57,8 +57,8 @@ static int sh_clk_mstp_enable(struct clk *clk)
if (clk->status_reg) {
unsigned int (*read)(const void __iomem *addr);
int i;
- void __iomem *mapped_status = (phys_addr_t)clk->status_reg -
- (phys_addr_t)clk->enable_reg + clk->mapped_reg;
+ void __iomem *mapped_status = (phys_addr_t)(unsigned long)clk->status_reg -
+ (phys_addr_t)(unsigned long)clk->enable_reg + clk->mapped_reg;
if (clk->flags & CLK_ENABLE_REG_8BIT)
read = r8;
@@ -478,7 +478,7 @@ int __init sh_clk_fsidiv_register(struct clk *clks, int nr)
}
/* clks[i].enable_reg came from SH_CLK_FSIDIV() */
- map->phys = (phys_addr_t)clks[i].enable_reg;
+ map->phys = (phys_addr_t)(unsigned long)clks[i].enable_reg;
map->len = 8;
clks[i].enable_reg = 0; /* remove .enable_reg */
diff --git a/drivers/sh/intc/core.c b/drivers/sh/intc/core.c
index 81f22980b2de..2b2883c350a6 100644
--- a/drivers/sh/intc/core.c
+++ b/drivers/sh/intc/core.c
@@ -67,7 +67,7 @@ void intc_set_prio_level(unsigned int irq, unsigned int level)
static void intc_redirect_irq(unsigned int irq, struct irq_desc *desc)
{
- generic_handle_irq((unsigned int)irq_get_handler_data(irq));
+ generic_handle_irq((unsigned long)irq_get_handler_data(irq));
}
static void __init intc_register_irq(struct intc_desc *desc,
@@ -116,7 +116,7 @@ static void __init intc_register_irq(struct intc_desc *desc,
disable_irq_nosync(irq);
irq_set_chip_and_handler_name(irq, &d->chip, handle_level_irq,
"level");
- irq_set_chip_data(irq, (void *)data[primary]);
+ irq_set_chip_data(irq, (void *)(unsigned long)data[primary]);
/*
* set priority level
@@ -367,7 +367,7 @@ int __init register_intc_controller(struct intc_desc *desc)
/* redirect this interrupts to the first one */
irq_set_chip(irq2, &dummy_irq_chip);
irq_set_chained_handler(irq2, intc_redirect_irq);
- irq_set_handler_data(irq2, (void *)irq);
+ irq_set_handler_data(irq2, (void *)(unsigned long)irq);
}
}
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH 2/2] SH: Fix compilation errors in SH64 signal handling code
2014-08-18 11:00 [PATCH 1/2] SH: Add missing casts in integer-pointer conversions David Howells
@ 2014-08-18 11:01 ` David Howells
0 siblings, 0 replies; 2+ messages in thread
From: David Howells @ 2014-08-18 11:01 UTC (permalink / raw)
To: torvalds; +Cc: dhowells, apkm, linux-kernel, linux-sh
Fix a couple of compilation errors in SH64 signal handling code.
Signed-off-by: David Howells <dhowells@redhat.com>
---
arch/sh/kernel/signal_64.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/sh/kernel/signal_64.c b/arch/sh/kernel/signal_64.c
index 897abe7b871e..28448381deb9 100644
--- a/arch/sh/kernel/signal_64.c
+++ b/arch/sh/kernel/signal_64.c
@@ -412,7 +412,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs
* On SH5 all edited pointers are subject to NEFF
*/
DEREF_REG_PR = neff_sign_extend((unsigned long)
- ksig->ka->sa.sa_restorer | 0x1);
+ ksig->ka.sa.sa_restorer | 0x1);
} else {
/*
* Different approach on SH5.
@@ -468,7 +468,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs
return 0;
}
-static int setup_rt_frame(struct ksignal *kig, sigset_t *set,
+static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
struct pt_regs *regs)
{
struct rt_sigframe __user *frame;
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-08-18 11:45 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-18 11:00 [PATCH 1/2] SH: Add missing casts in integer-pointer conversions David Howells
2014-08-18 11:01 ` [PATCH 2/2] SH: Fix compilation errors in SH64 signal handling code David Howells
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®