All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] HID: roccat: Drop cast
@ 2014-06-26 17:28 Himangi Saraogi
  2014-06-26 17:38 ` Joe Perches
  2014-06-26 22:35 ` Jiri Kosina
  0 siblings, 2 replies; 9+ messages in thread
From: Himangi Saraogi @ 2014-06-26 17:28 UTC (permalink / raw)
  To: Stefan Achatz, Jiri Kosina, linux-input, linux-kernel; +Cc: julia.lawall

This patch removes the cast on data of type void* as it is not needed.
The following Coccinelle semantic patch was used for making the change:

@r@
expression x;
void* e;
type T;
identifier f;
@@

(
  *((T *)e)
|
  ((T *)x)[...]
|
  ((T *)x)->f
|
- (T *)
  e
)

Signed-off-by: Himangi Saraogi <himangi774@gmail.com>
Acked-by: Julia Lawall <julia.lawall@lip6.fr>
---
 drivers/hid/hid-roccat-lua.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/hid/hid-roccat-lua.c b/drivers/hid/hid-roccat-lua.c
index 6adc0fa..65e2e76 100644
--- a/drivers/hid/hid-roccat-lua.c
+++ b/drivers/hid/hid-roccat-lua.c
@@ -61,7 +61,7 @@ static ssize_t lua_sysfs_write(struct file *fp, struct kobject *kobj,
 		return -EINVAL;
 
 	mutex_lock(&lua->lua_lock);
-	retval = roccat_common2_send(usb_dev, command, (void *)buf, real_size);
+	retval = roccat_common2_send(usb_dev, command, buf, real_size);
 	mutex_unlock(&lua->lua_lock);
 
 	return retval ? retval : real_size;
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: roccat: Drop cast
  2014-06-26 17:28 [PATCH] HID: roccat: Drop cast Himangi Saraogi
@ 2014-06-26 17:38 ` Joe Perches
  2014-06-27  5:29   ` Julia Lawall
  2014-06-26 22:35 ` Jiri Kosina
  1 sibling, 1 reply; 9+ messages in thread
From: Joe Perches @ 2014-06-26 17:38 UTC (permalink / raw)
  To: Himangi Saraogi
  Cc: Stefan Achatz, Jiri Kosina, linux-input, linux-kernel, julia.lawall

On Thu, 2014-06-26 at 22:58 +0530, Himangi Saraogi wrote:
> This patch removes the cast on data of type void* as it is not needed.

Hi Himangi

The cast of a const void * to a void * was odd.

Maybe a mechanism to verify appropriateness of
loss of constness for any pointer might be useful.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: roccat: Drop cast
  2014-06-26 17:28 [PATCH] HID: roccat: Drop cast Himangi Saraogi
  2014-06-26 17:38 ` Joe Perches
@ 2014-06-26 22:35 ` Jiri Kosina
  1 sibling, 0 replies; 9+ messages in thread
From: Jiri Kosina @ 2014-06-26 22:35 UTC (permalink / raw)
  To: Himangi Saraogi; +Cc: Stefan Achatz, linux-input, linux-kernel, julia.lawall

On Thu, 26 Jun 2014, Himangi Saraogi wrote:

> This patch removes the cast on data of type void* as it is not needed.
> The following Coccinelle semantic patch was used for making the change:
> 
> @r@
> expression x;
> void* e;
> type T;
> identifier f;
> @@
> 
> (
>   *((T *)e)
> |
>   ((T *)x)[...]
> |
>   ((T *)x)->f
> |
> - (T *)
>   e
> )
> 
> Signed-off-by: Himangi Saraogi <himangi774@gmail.com>
> Acked-by: Julia Lawall <julia.lawall@lip6.fr>
> ---
>  drivers/hid/hid-roccat-lua.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/hid/hid-roccat-lua.c b/drivers/hid/hid-roccat-lua.c
> index 6adc0fa..65e2e76 100644
> --- a/drivers/hid/hid-roccat-lua.c
> +++ b/drivers/hid/hid-roccat-lua.c
> @@ -61,7 +61,7 @@ static ssize_t lua_sysfs_write(struct file *fp, struct kobject *kobj,
>  		return -EINVAL;
>  
>  	mutex_lock(&lua->lua_lock);
> -	retval = roccat_common2_send(usb_dev, command, (void *)buf, real_size);
> +	retval = roccat_common2_send(usb_dev, command, buf, real_size);
>  	mutex_unlock(&lua->lua_lock);

Applied, thanks.

-- 
Jiri Kosina
SUSE Labs

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: roccat: Drop cast
  2014-06-26 17:38 ` Joe Perches
@ 2014-06-27  5:29   ` Julia Lawall
  2014-06-27  5:52     ` Joe Perches
  0 siblings, 1 reply; 9+ messages in thread
From: Julia Lawall @ 2014-06-27  5:29 UTC (permalink / raw)
  To: Joe Perches
  Cc: Himangi Saraogi, Stefan Achatz, Jiri Kosina, linux-input, linux-kernel



On Thu, 26 Jun 2014, Joe Perches wrote:

> On Thu, 2014-06-26 at 22:58 +0530, Himangi Saraogi wrote:
> > This patch removes the cast on data of type void* as it is not needed.
> 
> Hi Himangi
> 
> The cast of a const void * to a void * was odd.
> 
> Maybe a mechanism to verify appropriateness of
> loss of constness for any pointer might be useful.

I tried the following, but didn't find anything interesting:

@disable drop_cast@
type T;
const T e;
@@

* (T)e

julia

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: roccat: Drop cast
  2014-06-27  5:29   ` Julia Lawall
@ 2014-06-27  5:52     ` Joe Perches
  2014-06-27  7:59       ` Julia Lawall
  2014-06-29 16:34       ` Julia Lawall
  0 siblings, 2 replies; 9+ messages in thread
From: Joe Perches @ 2014-06-27  5:52 UTC (permalink / raw)
  To: Julia Lawall
  Cc: Himangi Saraogi, Stefan Achatz, Jiri Kosina, linux-input, linux-kernel

On Fri, 2014-06-27 at 07:29 +0200, Julia Lawall wrote:
> On Thu, 26 Jun 2014, Joe Perches wrote:
> > The cast of a const void * to a void * was odd.
> > 
> > Maybe a mechanism to verify appropriateness of
> > loss of constness for any pointer might be useful.
> 
> I tried the following, but didn't find anything interesting:
> 
> @disable drop_cast@
> type T;
> const T e;
> @@
> 
> * (T)e

What code does this match?
Do you have an example match?

This doesn't find a cast of a void type like:

void func(const void * const p)
{
	char *p2 = p;

	p2[0] = 1;
}



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: roccat: Drop cast
  2014-06-27  5:52     ` Joe Perches
@ 2014-06-27  7:59       ` Julia Lawall
  2014-06-29 16:34       ` Julia Lawall
  1 sibling, 0 replies; 9+ messages in thread
From: Julia Lawall @ 2014-06-27  7:59 UTC (permalink / raw)
  To: Joe Perches
  Cc: Himangi Saraogi, Stefan Achatz, Jiri Kosina, linux-input, linux-kernel



On Thu, 26 Jun 2014, Joe Perches wrote:

> On Fri, 2014-06-27 at 07:29 +0200, Julia Lawall wrote:
> > On Thu, 26 Jun 2014, Joe Perches wrote:
> > > The cast of a const void * to a void * was odd.
> > >
> > > Maybe a mechanism to verify appropriateness of
> > > loss of constness for any pointer might be useful.
> >
> > I tried the following, but didn't find anything interesting:
> >
> > @disable drop_cast@
> > type T;
> > const T e;
> > @@
> >
> > * (T)e
>
> What code does this match?
> Do you have an example match?
>
> This doesn't find a cast of a void type like:
>
> void func(const void * const p)
> {
> 	char *p2 = p;
>
> 	p2[0] = 1;
> }

The results are below.  Except in the first case, none are pointer types.
The first case looks very intentional, although if the intention is
needed, perhaps the types should be listed differently.

I was surprised not to get more results.  Maybe there is not enough type
information.  I did use --all-includes but not --recursive-includes, ie
only explicitly mentioned include files are taken into account.

My rule doesn't consider implicit casts like in your example.  I can try
that.

julia


diff -u -p /var/linuxes/linux-next/lib/devres.c /tmp/nothing/lib/devres.c
--- /var/linuxes/linux-next/lib/devres.c
+++ /tmp/nothing/lib/devres.c
@@ -296,7 +296,6 @@ void __iomem *pcim_iomap(struct pci_dev

 	BUG_ON(bar >= PCIM_IOMAP_MAX);

-	tbl = (void __iomem **)pcim_iomap_table(pdev);
 	if (!tbl || tbl[bar])	/* duplicate mappings not allowed */
 		return NULL;

@@ -319,7 +318,6 @@ void pcim_iounmap(struct pci_dev *pdev,

 	pci_iounmap(pdev, addr);

-	tbl = (void __iomem **)pcim_iomap_table(pdev);
 	BUG_ON(!tbl);

 	for (i = 0; i < PCIM_IOMAP_MAX; i++)
diff -u -p /var/linuxes/linux-next/drivers/video/fbdev/smscufx.c /tmp/nothing/drivers/video/fbdev/smscufx.c
--- /var/linuxes/linux-next/drivers/video/fbdev/smscufx.c
+++ /tmp/nothing/drivers/video/fbdev/smscufx.c
@@ -976,7 +976,6 @@ static void ufx_dpy_deferred_io(struct f
 		const int width = dev->info->var.xres;
 		const int y = (cur->index << PAGE_SHIFT) / (width * 2);
 		int height = (PAGE_SIZE / (width * 2)) + 1;
-		height = min(height, (int)(dev->info->var.yres - y));

 		BUG_ON(y >= dev->info->var.yres);
 		BUG_ON((y + height) > dev->info->var.yres);
diff -u -p /var/linuxes/linux-next/drivers/mtd/chips/jedec_probe.c /tmp/nothing/drivers/mtd/chips/jedec_probe.c
--- /var/linuxes/linux-next/drivers/mtd/chips/jedec_probe.c
+++ /tmp/nothing/drivers/mtd/chips/jedec_probe.c
@@ -2027,11 +2027,8 @@ static inline int jedec_match( uint32_t
 		}
 		break;
 	case CFI_DEVICETYPE_X16:
-		mfr = (uint16_t)finfo->mfr_id;
-		id = (uint16_t)finfo->dev_id;
 		break;
 	case CFI_DEVICETYPE_X32:
-		mfr = (uint16_t)finfo->mfr_id;
 		id = (uint32_t)finfo->dev_id;
 		break;
 	default:
diff -u -p /var/linuxes/linux-next/drivers/net/wireless/libertas/defs.h /tmp/nothing/drivers/net/wireless/libertas/defs.h
--- /var/linuxes/linux-next/drivers/net/wireless/libertas/defs.h
+++ /tmp/nothing/drivers/net/wireless/libertas/defs.h
@@ -105,7 +105,6 @@ static inline void lbs_deb_hex(unsigned
 					printk("\n");
 				printk(DRV_NAME " %s: ", prompt);
 			}
-			printk("%02x ", (u8) * buf);
 			buf++;
 		}
 		printk("\n");
diff -u -p /var/linuxes/linux-next/drivers/media/i2c/tvp5150.c /tmp/nothing/drivers/media/i2c/tvp5150.c
--- /var/linuxes/linux-next/drivers/media/i2c/tvp5150.c
+++ /tmp/nothing/drivers/media/i2c/tvp5150.c
@@ -95,7 +95,6 @@ static void dump_reg_range(struct v4l2_s
 {
 	int i = 0;

-	while (init != (u8)(end + 1)) {
 		if ((i % max_line) == 0) {
 			if (i > 0)
 				printk("\n");
diff -u -p /var/linuxes/linux-next/net/netfilter/ipvs/ip_vs_sync.c /tmp/nothing/net/netfilter/ipvs/ip_vs_sync.c
--- /var/linuxes/linux-next/net/netfilter/ipvs/ip_vs_sync.c
+++ /tmp/nothing/net/netfilter/ipvs/ip_vs_sync.c
@@ -1543,7 +1543,6 @@ ip_vs_send_async(struct socket *sock, co
 	iov.iov_base     = (void *)buffer;
 	iov.iov_len      = length;

-	len = kernel_sendmsg(sock, &msg, &iov, 1, (size_t)(length));

 	LeaveFunction(7);
 	return len;
@@ -1575,7 +1574,6 @@ ip_vs_receive(struct socket *sock, char

 	/* Receive a packet */
 	iov.iov_base     = buffer;
-	iov.iov_len      = (size_t)buflen;

 	len = kernel_recvmsg(sock, &msg, &iov, 1, buflen, MSG_DONTWAIT);

diff -u -p /var/linuxes/linux-next/net/ipv4/tcp_output.c /tmp/nothing/net/ipv4/tcp_output.c
--- /var/linuxes/linux-next/net/ipv4/tcp_output.c
+++ /tmp/nothing/net/ipv4/tcp_output.c
@@ -177,7 +177,6 @@ static void tcp_event_data_sent(struct t
 	/* If it is a reply for ato after last received
 	 * packet, enter pingpong mode.
 	 */
-	if ((u32)(now - icsk->icsk_ack.lrcvtime) < icsk->icsk_ack.ato &&
 	    (!dst || !dst_metric(dst, RTAX_QUICKACK)))
 			icsk->icsk_ack.pingpong = 1;
 }


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: roccat: Drop cast
  2014-06-27  5:52     ` Joe Perches
  2014-06-27  7:59       ` Julia Lawall
@ 2014-06-29 16:34       ` Julia Lawall
  2014-06-29 18:25         ` Joe Perches
  1 sibling, 1 reply; 9+ messages in thread
From: Julia Lawall @ 2014-06-29 16:34 UTC (permalink / raw)
  To: Joe Perches
  Cc: Himangi Saraogi, Stefan Achatz, Jiri Kosina, linux-input, linux-kernel



On Thu, 26 Jun 2014, Joe Perches wrote:

> On Fri, 2014-06-27 at 07:29 +0200, Julia Lawall wrote:
> > On Thu, 26 Jun 2014, Joe Perches wrote:
> > > The cast of a const void * to a void * was odd.
> > > 
> > > Maybe a mechanism to verify appropriateness of
> > > loss of constness for any pointer might be useful.
> > 
> > I tried the following, but didn't find anything interesting:
> > 
> > @disable drop_cast@
> > type T;
> > const T e;
> > @@
> > 
> > * (T)e
> 
> What code does this match?
> Do you have an example match?
> 
> This doesn't find a cast of a void type like:
> 
> void func(const void * const p)
> {
> 	char *p2 = p;
> 
> 	p2[0] = 1;
> }

Is this a real example?  Because gcc complains about this sort of problem.  
I made a semantic patch that detects this, but since gcc does the same 
thing, it doesn't seem very interesting.  Coccinelle gives a few false 
positives due to lack of type information.

julia

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: roccat: Drop cast
  2014-06-29 16:34       ` Julia Lawall
@ 2014-06-29 18:25         ` Joe Perches
  2014-06-30  9:08           ` Geert Uytterhoeven
  0 siblings, 1 reply; 9+ messages in thread
From: Joe Perches @ 2014-06-29 18:25 UTC (permalink / raw)
  To: Julia Lawall
  Cc: Himangi Saraogi, Stefan Achatz, Jiri Kosina, linux-input, linux-kernel

On Sun, 2014-06-29 at 18:34 +0200, Julia Lawall wrote:
> On Thu, 26 Jun 2014, Joe Perches wrote:
> > void func(const void * const p)
> > {
> > 	char *p2 = p;
> > 
> > 	p2[0] = 1;
> > }
> 
> Is this a real example?

No, it's not.

I think I've seen code in the kernel like
	char *p2 = (void *)p;
where p is const and p2 is dereferenced and set.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] HID: roccat: Drop cast
  2014-06-29 18:25         ` Joe Perches
@ 2014-06-30  9:08           ` Geert Uytterhoeven
  0 siblings, 0 replies; 9+ messages in thread
From: Geert Uytterhoeven @ 2014-06-30  9:08 UTC (permalink / raw)
  To: Joe Perches
  Cc: Julia Lawall, Himangi Saraogi, Stefan Achatz, Jiri Kosina,
	linux-input, linux-kernel

On Sun, Jun 29, 2014 at 8:25 PM, Joe Perches <joe@perches.com> wrote:
> I think I've seen code in the kernel like
>         char *p2 = (void *)p;
> where p is const and p2 is dereferenced and set.

I can imagine there's code like that.

Still hoping for gcc to gain an option to warn about all casts, except in header
files...

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2014-06-30  9:08 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-26 17:28 [PATCH] HID: roccat: Drop cast Himangi Saraogi
2014-06-26 17:38 ` Joe Perches
2014-06-27  5:29   ` Julia Lawall
2014-06-27  5:52     ` Joe Perches
2014-06-27  7:59       ` Julia Lawall
2014-06-29 16:34       ` Julia Lawall
2014-06-29 18:25         ` Joe Perches
2014-06-30  9:08           ` Geert Uytterhoeven
2014-06-26 22:35 ` Jiri Kosina

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.