* Zillions of warnings in -next @ 2009-10-27 15:25 Alan Cox 2009-10-27 15:57 ` Gregory Haskins 2009-10-27 20:53 ` Gregory Haskins 0 siblings, 2 replies; 8+ messages in thread From: Alan Cox @ 2009-10-27 15:25 UTC (permalink / raw) To: ghaskins, linux-kernel I was thinking "what a lot of new warnings". Then I dug a little deeper and it seems that someone never bothered to try and build drivers/net/vbus-enet.c on a 32bit system. So would you mind fixing the 27 new warnings introduced ? Alan ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Zillions of warnings in -next 2009-10-27 15:25 Zillions of warnings in -next Alan Cox @ 2009-10-27 15:57 ` Gregory Haskins 2009-10-27 20:53 ` Gregory Haskins 1 sibling, 0 replies; 8+ messages in thread From: Gregory Haskins @ 2009-10-27 15:57 UTC (permalink / raw) To: Alan Cox, linux-kernel >>> On 10/27/2009 at 11:25 AM, in message <20091027152530.75ca60e4@lxorguk.ukuu.org.uk>, Alan Cox <alan@lxorguk.ukuu.org.uk> wrote: > I was thinking "what a lot of new warnings". Then I dug a little deeper > and it seems that someone never bothered to try and build > drivers/net/vbus-enet.c on a 32bit system. > > So would you mind fixing the 27 new warnings introduced ? > > Alan Im on it. Thanks Alan, -Greg ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Zillions of warnings in -next 2009-10-27 15:25 Zillions of warnings in -next Alan Cox 2009-10-27 15:57 ` Gregory Haskins @ 2009-10-27 20:53 ` Gregory Haskins 2009-10-27 22:21 ` Alan Cox 1 sibling, 1 reply; 8+ messages in thread From: Gregory Haskins @ 2009-10-27 20:53 UTC (permalink / raw) To: Alan Cox, linux-kernel >>> On 10/27/2009 at 11:25 AM, in message <20091027152530.75ca60e4@lxorguk.ukuu.org.uk>, Alan Cox <alan@lxorguk.ukuu.org.uk> wrote: > I was thinking "what a lot of new warnings". Then I dug a little deeper > and it seems that someone never bothered to try and build > drivers/net/vbus-enet.c on a 32bit system. > > So would you mind fixing the 27 new warnings introduced ? > > Alan I just did a 32-bit build and indeed reproduced the warnings. However, the warnings appear to be dubious as the code is properly (afaict) annotated with explicit casts, and I believe they are doing what I intended. Basically I have structures that are always 64 bit (so we can have a mixed-mode 32-bit guest talk to a 64-bit hypervisor, for instance). Therefore I am casting between native and u64, but the compiler doesn't like this. Does anyone have any suggestions on ways to fix this so the compiler is happy? For instance: struct foo { u64 bar; } xmit_foo(void *ptr) { struct foo f; f->bar = (u64)ptr; /* generates warning */ } Kind Regards, -Greg ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Zillions of warnings in -next 2009-10-27 20:53 ` Gregory Haskins @ 2009-10-27 22:21 ` Alan Cox 2009-10-27 22:36 ` [patch] " Randy Dunlap 0 siblings, 1 reply; 8+ messages in thread From: Alan Cox @ 2009-10-27 22:21 UTC (permalink / raw) To: Gregory Haskins; +Cc: linux-kernel > I just did a 32-bit build and indeed reproduced the warnings. However, the warnings > appear to be dubious as the code is properly (afaict) annotated with explicit casts, and > I believe they are doing what I intended. > > Basically I have structures that are always 64 bit (so we can have a mixed-mode 32-bit > guest talk to a 64-bit hypervisor, for instance). Therefore I am casting between native > and u64, but the compiler doesn't like this. Does anyone have any suggestions on ways > to fix this so the compiler is happy? foo = (void *)(unsigned long)x works for the general case because Linux assumes ptr fits ulong Similarly in the other direction. Alan ^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch] Re: Zillions of warnings in -next 2009-10-27 22:21 ` Alan Cox @ 2009-10-27 22:36 ` Randy Dunlap 2009-10-27 23:25 ` Joe Perches 2009-10-28 13:35 ` Gregory Haskins 0 siblings, 2 replies; 8+ messages in thread From: Randy Dunlap @ 2009-10-27 22:36 UTC (permalink / raw) To: Alan Cox; +Cc: Gregory Haskins, linux-kernel On Tue, 27 Oct 2009 22:21:12 +0000 Alan Cox wrote: > > I just did a 32-bit build and indeed reproduced the warnings. However, the warnings > > appear to be dubious as the code is properly (afaict) annotated with explicit casts, and > > I believe they are doing what I intended. > > > > Basically I have structures that are always 64 bit (so we can have a mixed-mode 32-bit > > guest talk to a 64-bit hypervisor, for instance). Therefore I am casting between native > > and u64, but the compiler doesn't like this. Does anyone have any suggestions on ways > > to fix this so the compiler is happy? > > foo = (void *)(unsigned long)x > > works for the general case because Linux assumes ptr fits ulong > > Similarly in the other direction. Yes, I already had this done for venet and pci-bridge. Patch below. --- From: Randy Dunlap <randy.dunlap@oracle.com> Eliminate all cast warnings in vbus-enet.c and pci-bridge.c. Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com> --- drivers/net/vbus-enet.c | 52 ++++++++++++++++++------------------ drivers/vbus/pci-bridge.c | 13 ++++----- 2 files changed, 33 insertions(+), 32 deletions(-) --- linux-next-20091027.orig/drivers/net/vbus-enet.c +++ linux-next-20091027/drivers/net/vbus-enet.c @@ -162,18 +162,18 @@ rxdesc_alloc(struct vbus_enet_priv *priv * larger than MTU, the host will grab pages out of the * page-queue and populate additional IOVs */ - struct venet_sg *vsg = (struct venet_sg *)desc->cookie; + struct venet_sg *vsg = (struct venet_sg *)(unsigned long)desc->cookie; struct venet_iov *iov = &vsg->iov[0]; memset(vsg, 0, SG_DESC_SIZE); - vsg->cookie = (u64)skb; + vsg->cookie = (u64)(unsigned long)skb; vsg->count = 1; iov->ptr = (u64)__pa(skb->data); iov->len = len; } else { - desc->cookie = (u64)skb; + desc->cookie = (u64)(unsigned long)skb; desc->ptr = (u64)__pa(skb->data); desc->len = len; /* total length */ } @@ -207,7 +207,7 @@ rx_pageq_refill(struct vbus_enet_priv *p page = alloc_page(GFP_KERNEL); BUG_ON(!page); - iter.desc->cookie = (u64)page; + iter.desc->cookie = (u64)(unsigned long)page; iter.desc->ptr = (u64)__pa(page_address(page)); iter.desc->len = PAGE_SIZE; @@ -253,7 +253,7 @@ rx_setup(struct vbus_enet_priv *priv) void *addr = &priv->l4ro.pool[offset]; iter.desc->ptr = (u64)offset; - iter.desc->cookie = (u64)addr; + iter.desc->cookie = (u64)(unsigned long)addr; iter.desc->len = SG_DESC_SIZE; } @@ -297,19 +297,19 @@ rx_rxq_teardown(struct vbus_enet_priv *p struct venet_sg *vsg; int i; - vsg = (struct venet_sg *)iter.desc->cookie; + vsg = (struct venet_sg *)(unsigned long)iter.desc->cookie; /* skip i=0, since that is the skb->data IOV */ for (i = 1; i < vsg->count; i++) { struct venet_iov *iov = &vsg->iov[i]; - struct page *page = (struct page *)iov->ptr; + struct page *page = (struct page *)(unsigned long)iov->ptr; put_page(page); } - skb = (struct sk_buff *)vsg->cookie; + skb = (struct sk_buff *)(unsigned long)vsg->cookie; } else - skb = (struct sk_buff *)iter.desc->cookie; + skb = (struct sk_buff *)(unsigned long)iter.desc->cookie; iter.desc->valid = 0; wmb(); @@ -341,7 +341,7 @@ rx_l4ro_teardown(struct vbus_enet_priv * * free each valid descriptor */ while (iter.desc->sown) { - struct page *page = (struct page *)iter.desc->cookie; + struct page *page = (struct page *)(unsigned long)iter.desc->cookie; iter.desc->valid = 0; wmb(); @@ -432,7 +432,7 @@ tx_setup(struct vbus_enet_priv *priv) iter.desc->ptr = (u64)__pa(vsg); } - iter.desc->cookie = (u64)vsg; + iter.desc->cookie = (u64)(unsigned long)vsg; iter.desc->len = SG_DESC_SIZE; ret = ioq_iter_seek(&iter, ioq_seek_next, 0, 0); @@ -480,7 +480,7 @@ tx_teardown(struct vbus_enet_priv *priv) * free each valid descriptor */ while (iter.desc->cookie) { - struct venet_sg *vsg = (struct venet_sg *)iter.desc->cookie; + struct venet_sg *vsg = (struct venet_sg *)(unsigned long)iter.desc->cookie; iter.desc->valid = 0; wmb(); @@ -597,8 +597,8 @@ vbus_enet_change_mtu(struct net_device * static struct sk_buff * vbus_enet_l4ro_import(struct vbus_enet_priv *priv, struct ioq_ring_desc *desc) { - struct venet_sg *vsg = (struct venet_sg *)desc->cookie; - struct sk_buff *skb = (struct sk_buff *)vsg->cookie; + struct venet_sg *vsg = (struct venet_sg *)(unsigned long)desc->cookie; + struct sk_buff *skb = (struct sk_buff *)(unsigned long)vsg->cookie; struct skb_shared_info *sinfo = skb_shinfo(skb); int i; @@ -618,7 +618,7 @@ vbus_enet_l4ro_import(struct vbus_enet_p /* skip i=0, since that is the skb->data IOV */ for (i = 1; i < vsg->count; i++) { struct venet_iov *iov = &vsg->iov[i]; - struct page *page = (struct page *)iov->ptr; + struct page *page = (struct page *)(unsigned long)iov->ptr; skb_frag_t *f = &sinfo->frags[i-1]; f->page = page; @@ -691,7 +691,7 @@ fail: static struct sk_buff * vbus_enet_flat_import(struct vbus_enet_priv *priv, struct ioq_ring_desc *desc) { - struct sk_buff *skb = (struct sk_buff *)desc->cookie; + struct sk_buff *skb = (struct sk_buff *)(unsigned long)desc->cookie; if (!desc->len) { /* @@ -816,7 +816,7 @@ vbus_enet_tx_start(struct sk_buff *skb, BUG_ON(iter.desc->sown); if (priv->sg) { - struct venet_sg *vsg = (struct venet_sg *)iter.desc->cookie; + struct venet_sg *vsg = (struct venet_sg *)(unsigned long)iter.desc->cookie; struct scatterlist sgl[MAX_SKB_FRAGS+1]; struct scatterlist *sg; int count, maxcount = ARRAY_SIZE(sgl); @@ -825,7 +825,7 @@ vbus_enet_tx_start(struct sk_buff *skb, memset(vsg, 0, sizeof(*vsg)); - vsg->cookie = (u64)skb; + vsg->cookie = (u64)(unsigned long)skb; vsg->len = skb->len; if (skb->ip_summed == CHECKSUM_PARTIAL) { @@ -873,7 +873,7 @@ vbus_enet_tx_start(struct sk_buff *skb, * non scatter-gather mode: simply put the skb right onto the * ring. */ - iter.desc->cookie = (u64)skb; + iter.desc->cookie = (u64)(unsigned long)skb; iter.desc->len = (u64)skb->len; iter.desc->ptr = (u64)__pa(skb->data); } @@ -950,10 +950,10 @@ vbus_enet_tx_reap_one(struct vbus_enet_p if (priv->sg) { struct venet_sg *vsg; - vsg = (struct venet_sg *)iter.desc->cookie; - skb = (struct sk_buff *)vsg->cookie; + vsg = (struct venet_sg *)(unsigned long)iter.desc->cookie; + skb = (struct sk_buff *)(unsigned long)vsg->cookie; } else - skb = (struct sk_buff *)iter.desc->cookie; + skb = (struct sk_buff *)(unsigned long)iter.desc->cookie; /* Reset the descriptor */ iter.desc->valid = 0; @@ -1069,7 +1069,7 @@ evq_txc_event(struct vbus_enet_priv *pri vbus_enet_tx_reap(priv); - vbus_enet_skb_complete(priv, (struct sk_buff *)event->cookie); + vbus_enet_skb_complete(priv, (struct sk_buff *)(unsigned long)event->cookie); } static void @@ -1097,7 +1097,7 @@ deferred_evq_isr(unsigned long data) while (!iter.desc->sown) { struct venet_event_header *header; - header = (struct venet_event_header *)iter.desc->cookie; + header = (struct venet_event_header *)(unsigned long)iter.desc->cookie; switch (header->id) { case VENET_EVENT_LINKSTATE: @@ -1112,7 +1112,7 @@ deferred_evq_isr(unsigned long data) break; } - memset((void *)iter.desc->cookie, 0, priv->evq.evsize); + memset((void *)(unsigned long)iter.desc->cookie, 0, priv->evq.evsize); /* Advance the in-use tail */ ret = ioq_iter_pop(&iter, 0); @@ -1254,7 +1254,7 @@ vbus_enet_evq_negcap(struct vbus_enet_pr void *addr = &priv->evq.pool[offset]; iter.desc->ptr = (u64)offset; - iter.desc->cookie = (u64)addr; + iter.desc->cookie = (u64)(unsigned long)addr; iter.desc->len = query.evsize; ret = ioq_iter_push(&iter, 0); --- linux-next-20091027.orig/drivers/vbus/pci-bridge.c +++ linux-next-20091027/drivers/vbus/pci-bridge.c @@ -325,9 +325,10 @@ vbus_pci_device_shm(struct vbus_device_p */ shm_signal_get(&_signal->signal); - params.signal.offset = (u64)sdesc - (u64)ptr; + params.signal.offset = (u64)(unsigned long)sdesc - + (u64)(unsigned long)ptr; params.signal.prio = prio; - params.signal.cookie = (u64)_signal; + params.signal.cookie = (u64)(unsigned long)_signal; } else params.signal.offset = -1; /* yes, this is a u32, but its ok */ @@ -526,7 +527,7 @@ event_devdrop(struct vbus_pci_handle_eve static void event_shmsignal(struct vbus_pci_handle_event *event) { - struct _signal *_signal = (struct _signal *)event->handle; + struct _signal *_signal = (struct _signal *)(unsigned long)event->handle; struct irq_desc *desc = _signal->desc; vbus_pci.stats.notify++; @@ -536,7 +537,7 @@ event_shmsignal(struct vbus_pci_handle_e static void event_shmclose(struct vbus_pci_handle_event *event) { - struct _signal *_signal = (struct _signal *)event->handle; + struct _signal *_signal = (struct _signal *)(unsigned long)event->handle; /* * This reference was taken during the DEVICESHM call @@ -593,7 +594,7 @@ eventq_init(int qlen) BUG_ON(iter.desc->valid); - desc->cookie = (u64)event; + desc->cookie = (u64)(unsigned long)event; desc->ptr = (u64)__pa(event); desc->len = len; /* total length */ desc->valid = 1; @@ -643,7 +644,7 @@ eventq_wakeup(struct ioq_notifier *notif struct ioq_ring_desc *desc = iter.desc; struct vbus_pci_event *event; - event = (struct vbus_pci_event *)desc->cookie; + event = (struct vbus_pci_event *)(unsigned long)desc->cookie; switch (event->eventid) { case VBUS_PCI_EVENT_DEVADD: ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [patch] Re: Zillions of warnings in -next 2009-10-27 22:36 ` [patch] " Randy Dunlap @ 2009-10-27 23:25 ` Joe Perches 2009-10-28 0:08 ` Stefan Richter 2009-10-28 13:35 ` Gregory Haskins 1 sibling, 1 reply; 8+ messages in thread From: Joe Perches @ 2009-10-27 23:25 UTC (permalink / raw) To: Randy Dunlap; +Cc: Alan Cox, Gregory Haskins, linux-kernel On Tue, 2009-10-27 at 15:36 -0700, Randy Dunlap wrote: > On Tue, 27 Oct 2009 22:21:12 +0000 Alan Cox wrote: > > > > I just did a 32-bit build and indeed reproduced the warnings. However, the warnings > > > appear to be dubious as the code is properly (afaict) annotated with explicit casts, and > > > I believe they are doing what I intended. > > > > > > Basically I have structures that are always 64 bit (so we can have a mixed-mode 32-bit > > > guest talk to a 64-bit hypervisor, for instance). Therefore I am casting between native > > > and u64, but the compiler doesn't like this. Does anyone have any suggestions on ways > > > to fix this so the compiler is happy? > > > > foo = (void *)(unsigned long)x > > > > works for the general case because Linux assumes ptr fits ulong > > > > Similarly in the other direction. > > Yes, I already had this done for venet and pci-bridge. Patch below. > > --- > From: Randy Dunlap <randy.dunlap@oracle.com> > > Eliminate all cast warnings in vbus-enet.c and pci-bridge.c. > > Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com> > --- > drivers/net/vbus-enet.c | 52 ++++++++++++++++++------------------ > drivers/vbus/pci-bridge.c | 13 ++++----- > 2 files changed, 33 insertions(+), 32 deletions(-) > > --- linux-next-20091027.orig/drivers/net/vbus-enet.c > +++ linux-next-20091027/drivers/net/vbus-enet.c > @@ -162,18 +162,18 @@ rxdesc_alloc(struct vbus_enet_priv *priv > * larger than MTU, the host will grab pages out of the > * page-queue and populate additional IOVs > */ > - struct venet_sg *vsg = (struct venet_sg *)desc->cookie; > + struct venet_sg *vsg = (struct venet_sg *)(unsigned long)desc->cookie; > struct venet_iov *iov = &vsg->iov[0]; > > memset(vsg, 0, SG_DESC_SIZE); > > - vsg->cookie = (u64)skb; > + vsg->cookie = (u64)(unsigned long)skb; > vsg->count = 1; > > iov->ptr = (u64)__pa(skb->data); > iov->len = len; > } else { > - desc->cookie = (u64)skb; > + desc->cookie = (u64)(unsigned long)skb; > desc->ptr = (u64)__pa(skb->data); > desc->len = len; /* total length */ > } > @@ -207,7 +207,7 @@ rx_pageq_refill(struct vbus_enet_priv *p > page = alloc_page(GFP_KERNEL); > BUG_ON(!page); > > - iter.desc->cookie = (u64)page; > + iter.desc->cookie = (u64)(unsigned long)page; > iter.desc->ptr = (u64)__pa(page_address(page)); > iter.desc->len = PAGE_SIZE; > > @@ -253,7 +253,7 @@ rx_setup(struct vbus_enet_priv *priv) > void *addr = &priv->l4ro.pool[offset]; > > iter.desc->ptr = (u64)offset; > - iter.desc->cookie = (u64)addr; > + iter.desc->cookie = (u64)(unsigned long)addr; > iter.desc->len = SG_DESC_SIZE; > } > > @@ -297,19 +297,19 @@ rx_rxq_teardown(struct vbus_enet_priv *p > struct venet_sg *vsg; > int i; > > - vsg = (struct venet_sg *)iter.desc->cookie; > + vsg = (struct venet_sg *)(unsigned long)iter.desc->cookie; > > /* skip i=0, since that is the skb->data IOV */ > for (i = 1; i < vsg->count; i++) { > struct venet_iov *iov = &vsg->iov[i]; > - struct page *page = (struct page *)iov->ptr; > + struct page *page = (struct page *)(unsigned long)iov->ptr; > > put_page(page); > } > > - skb = (struct sk_buff *)vsg->cookie; > + skb = (struct sk_buff *)(unsigned long)vsg->cookie; > } else > - skb = (struct sk_buff *)iter.desc->cookie; > + skb = (struct sk_buff *)(unsigned long)iter.desc->cookie; > > iter.desc->valid = 0; > wmb(); > @@ -341,7 +341,7 @@ rx_l4ro_teardown(struct vbus_enet_priv * > * free each valid descriptor > */ > while (iter.desc->sown) { > - struct page *page = (struct page *)iter.desc->cookie; > + struct page *page = (struct page *)(unsigned long)iter.desc->cookie; > > iter.desc->valid = 0; > wmb(); > @@ -432,7 +432,7 @@ tx_setup(struct vbus_enet_priv *priv) > iter.desc->ptr = (u64)__pa(vsg); > } > > - iter.desc->cookie = (u64)vsg; > + iter.desc->cookie = (u64)(unsigned long)vsg; > iter.desc->len = SG_DESC_SIZE; > > ret = ioq_iter_seek(&iter, ioq_seek_next, 0, 0); > @@ -480,7 +480,7 @@ tx_teardown(struct vbus_enet_priv *priv) > * free each valid descriptor > */ > while (iter.desc->cookie) { > - struct venet_sg *vsg = (struct venet_sg *)iter.desc->cookie; > + struct venet_sg *vsg = (struct venet_sg *)(unsigned long)iter.desc->cookie; > > iter.desc->valid = 0; > wmb(); > @@ -597,8 +597,8 @@ vbus_enet_change_mtu(struct net_device * > static struct sk_buff * > vbus_enet_l4ro_import(struct vbus_enet_priv *priv, struct ioq_ring_desc *desc) > { > - struct venet_sg *vsg = (struct venet_sg *)desc->cookie; > - struct sk_buff *skb = (struct sk_buff *)vsg->cookie; > + struct venet_sg *vsg = (struct venet_sg *)(unsigned long)desc->cookie; > + struct sk_buff *skb = (struct sk_buff *)(unsigned long)vsg->cookie; > struct skb_shared_info *sinfo = skb_shinfo(skb); > int i; > > @@ -618,7 +618,7 @@ vbus_enet_l4ro_import(struct vbus_enet_p > /* skip i=0, since that is the skb->data IOV */ > for (i = 1; i < vsg->count; i++) { > struct venet_iov *iov = &vsg->iov[i]; > - struct page *page = (struct page *)iov->ptr; > + struct page *page = (struct page *)(unsigned long)iov->ptr; > skb_frag_t *f = &sinfo->frags[i-1]; > > f->page = page; > @@ -691,7 +691,7 @@ fail: > static struct sk_buff * > vbus_enet_flat_import(struct vbus_enet_priv *priv, struct ioq_ring_desc *desc) > { > - struct sk_buff *skb = (struct sk_buff *)desc->cookie; > + struct sk_buff *skb = (struct sk_buff *)(unsigned long)desc->cookie; > > if (!desc->len) { > /* > @@ -816,7 +816,7 @@ vbus_enet_tx_start(struct sk_buff *skb, > BUG_ON(iter.desc->sown); > > if (priv->sg) { > - struct venet_sg *vsg = (struct venet_sg *)iter.desc->cookie; > + struct venet_sg *vsg = (struct venet_sg *)(unsigned long)iter.desc->cookie; > struct scatterlist sgl[MAX_SKB_FRAGS+1]; > struct scatterlist *sg; > int count, maxcount = ARRAY_SIZE(sgl); > @@ -825,7 +825,7 @@ vbus_enet_tx_start(struct sk_buff *skb, > > memset(vsg, 0, sizeof(*vsg)); > > - vsg->cookie = (u64)skb; > + vsg->cookie = (u64)(unsigned long)skb; > vsg->len = skb->len; > > if (skb->ip_summed == CHECKSUM_PARTIAL) { > @@ -873,7 +873,7 @@ vbus_enet_tx_start(struct sk_buff *skb, > * non scatter-gather mode: simply put the skb right onto the > * ring. > */ > - iter.desc->cookie = (u64)skb; > + iter.desc->cookie = (u64)(unsigned long)skb; > iter.desc->len = (u64)skb->len; > iter.desc->ptr = (u64)__pa(skb->data); > } > @@ -950,10 +950,10 @@ vbus_enet_tx_reap_one(struct vbus_enet_p > if (priv->sg) { > struct venet_sg *vsg; > > - vsg = (struct venet_sg *)iter.desc->cookie; > - skb = (struct sk_buff *)vsg->cookie; > + vsg = (struct venet_sg *)(unsigned long)iter.desc->cookie; > + skb = (struct sk_buff *)(unsigned long)vsg->cookie; > } else > - skb = (struct sk_buff *)iter.desc->cookie; > + skb = (struct sk_buff *)(unsigned long)iter.desc->cookie; > > /* Reset the descriptor */ > iter.desc->valid = 0; > @@ -1069,7 +1069,7 @@ evq_txc_event(struct vbus_enet_priv *pri > > vbus_enet_tx_reap(priv); > > - vbus_enet_skb_complete(priv, (struct sk_buff *)event->cookie); > + vbus_enet_skb_complete(priv, (struct sk_buff *)(unsigned long)event->cookie); > } > > static void > @@ -1097,7 +1097,7 @@ deferred_evq_isr(unsigned long data) > while (!iter.desc->sown) { > struct venet_event_header *header; > > - header = (struct venet_event_header *)iter.desc->cookie; > + header = (struct venet_event_header *)(unsigned long)iter.desc->cookie; > > switch (header->id) { > case VENET_EVENT_LINKSTATE: > @@ -1112,7 +1112,7 @@ deferred_evq_isr(unsigned long data) > break; > } > > - memset((void *)iter.desc->cookie, 0, priv->evq.evsize); > + memset((void *)(unsigned long)iter.desc->cookie, 0, priv->evq.evsize); > > /* Advance the in-use tail */ > ret = ioq_iter_pop(&iter, 0); > @@ -1254,7 +1254,7 @@ vbus_enet_evq_negcap(struct vbus_enet_pr > void *addr = &priv->evq.pool[offset]; > > iter.desc->ptr = (u64)offset; > - iter.desc->cookie = (u64)addr; > + iter.desc->cookie = (u64)(unsigned long)addr; > iter.desc->len = query.evsize; > > ret = ioq_iter_push(&iter, 0); > --- linux-next-20091027.orig/drivers/vbus/pci-bridge.c > +++ linux-next-20091027/drivers/vbus/pci-bridge.c > @@ -325,9 +325,10 @@ vbus_pci_device_shm(struct vbus_device_p > */ > shm_signal_get(&_signal->signal); > > - params.signal.offset = (u64)sdesc - (u64)ptr; > + params.signal.offset = (u64)(unsigned long)sdesc - > + (u64)(unsigned long)ptr; > params.signal.prio = prio; > - params.signal.cookie = (u64)_signal; > + params.signal.cookie = (u64)(unsigned long)_signal; > > } else > params.signal.offset = -1; /* yes, this is a u32, but its ok */ > @@ -526,7 +527,7 @@ event_devdrop(struct vbus_pci_handle_eve > static void > event_shmsignal(struct vbus_pci_handle_event *event) > { > - struct _signal *_signal = (struct _signal *)event->handle; > + struct _signal *_signal = (struct _signal *)(unsigned long)event->handle; > struct irq_desc *desc = _signal->desc; > > vbus_pci.stats.notify++; > @@ -536,7 +537,7 @@ event_shmsignal(struct vbus_pci_handle_e > static void > event_shmclose(struct vbus_pci_handle_event *event) > { > - struct _signal *_signal = (struct _signal *)event->handle; > + struct _signal *_signal = (struct _signal *)(unsigned long)event->handle; > > /* > * This reference was taken during the DEVICESHM call > @@ -593,7 +594,7 @@ eventq_init(int qlen) > > BUG_ON(iter.desc->valid); > > - desc->cookie = (u64)event; > + desc->cookie = (u64)(unsigned long)event; > desc->ptr = (u64)__pa(event); > desc->len = len; /* total length */ > desc->valid = 1; > @@ -643,7 +644,7 @@ eventq_wakeup(struct ioq_notifier *notif > struct ioq_ring_desc *desc = iter.desc; > struct vbus_pci_event *event; > > - event = (struct vbus_pci_event *)desc->cookie; > + event = (struct vbus_pci_event *)(unsigned long)desc->cookie; > > switch (event->eventid) { > case VBUS_PCI_EVENT_DEVADD: #define cast_cookie(type, cookie) ((type)(unsigned long)(cookie)) #define assign_cookie(var, cookie) (var) = ((typeof(var))(unsigned long)(cookie)) ? > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [patch] Re: Zillions of warnings in -next 2009-10-27 23:25 ` Joe Perches @ 2009-10-28 0:08 ` Stefan Richter 0 siblings, 0 replies; 8+ messages in thread From: Stefan Richter @ 2009-10-28 0:08 UTC (permalink / raw) To: Joe Perches; +Cc: Randy Dunlap, Alan Cox, Gregory Haskins, linux-kernel Joe Perches wrote: > On Tue, 2009-10-27 at 15:36 -0700, Randy Dunlap wrote: [...] >> @@ -643,7 +644,7 @@ eventq_wakeup(struct ioq_notifier *notif >> struct ioq_ring_desc *desc = iter.desc; >> struct vbus_pci_event *event; >> >> - event = (struct vbus_pci_event *)desc->cookie; >> + event = (struct vbus_pci_event *)(unsigned long)desc->cookie; >> >> switch (event->eventid) { >> case VBUS_PCI_EVENT_DEVADD: > > #define cast_cookie(type, cookie) ((type)(unsigned long)(cookie)) > #define assign_cookie(var, cookie) (var) = ((typeof(var))(unsigned > long)(cookie)) C is usually preferred over cpp. :-) -- Stefan Richter -=====-==--= =-=- ===-- http://arcgraph.de/sr/ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [patch] Re: Zillions of warnings in -next 2009-10-27 22:36 ` [patch] " Randy Dunlap 2009-10-27 23:25 ` Joe Perches @ 2009-10-28 13:35 ` Gregory Haskins 1 sibling, 0 replies; 8+ messages in thread From: Gregory Haskins @ 2009-10-28 13:35 UTC (permalink / raw) To: Randy Dunlap; +Cc: Alan Cox, linux-kernel [-- Attachment #1: Type: text/plain, Size: 1154 bytes --] Randy Dunlap wrote: > On Tue, 27 Oct 2009 22:21:12 +0000 Alan Cox wrote: > >>> I just did a 32-bit build and indeed reproduced the warnings. However, the warnings >>> appear to be dubious as the code is properly (afaict) annotated with explicit casts, and >>> I believe they are doing what I intended. >>> >>> Basically I have structures that are always 64 bit (so we can have a mixed-mode 32-bit >>> guest talk to a 64-bit hypervisor, for instance). Therefore I am casting between native >>> and u64, but the compiler doesn't like this. Does anyone have any suggestions on ways >>> to fix this so the compiler is happy? >> foo = (void *)(unsigned long)x >> >> works for the general case because Linux assumes ptr fits ulong >> >> Similarly in the other direction. Thank you, Alan. Your tip was spot on. > > Yes, I already had this done for venet and pci-bridge. Patch below. > > --- > From: Randy Dunlap <randy.dunlap@oracle.com> > > Eliminate all cast warnings in vbus-enet.c and pci-bridge.c. > > Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com> Thank you, Randy. Applied. Kind Regards, -Greg [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 267 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2009-10-28 13:36 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-10-27 15:25 Zillions of warnings in -next Alan Cox 2009-10-27 15:57 ` Gregory Haskins 2009-10-27 20:53 ` Gregory Haskins 2009-10-27 22:21 ` Alan Cox 2009-10-27 22:36 ` [patch] " Randy Dunlap 2009-10-27 23:25 ` Joe Perches 2009-10-28 0:08 ` Stefan Richter 2009-10-28 13:35 ` Gregory Haskins
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox