Patchwork Re: [PATCH] vhost_net.c: v2 Fix build failure introduced by 0bfcd599e3f5c5679cc7d0165a0a1822e2f60de2

login
register
mail settings
Submitter Michael S. Tsirkin
Date May 27, 2010, 10:44 a.m.
Message ID <20100527104414.GA7250@redhat.com>
Download mbox | patch
Permalink /patch/53719/
State New
Headers show

Comments

Michael S. Tsirkin - May 27, 2010, 10:44 a.m.
On Thu, May 27, 2010 at 12:22:29PM +0200, Jes.Sorensen@redhat.com wrote:
> From: Jes Sorensen <Jes.Sorensen@redhat.com>
> 
> Fix build failure introduced by 0bfcd599e3f5c5679cc7d0165a0a1822e2f60de2
> 
> The format statement expects unsigned long on x86_64, but receives
> unsigned long long, so gcc exits with an error.
> 
> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>

I think this part of 0bfcd599e3f5c5679cc7d0165a0a1822e2f60de2
should just be reverted. We have unsigned long, it should be printed
woith %ll. Casting to uint64_t just so we can print with PRIu64 seems silly.

> ---
>  hw/vhost_net.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/hw/vhost_net.c b/hw/vhost_net.c
> index 26dae79..606aa0c 100644
> --- a/hw/vhost_net.c
> +++ b/hw/vhost_net.c
> @@ -100,7 +100,7 @@ struct vhost_net *vhost_net_init(VLANClientState *backend, int devfd)
>      }
>      if (~net->dev.features & net->dev.backend_features) {
>          fprintf(stderr, "vhost lacks feature mask %" PRIu64 " for backend\n",
> -                ~net->dev.features & net->dev.backend_features);
> +                (uint64_t)(~net->dev.features & net->dev.backend_features));
>          vhost_dev_cleanup(&net->dev);
>          goto fail;
>      }

How about just (untested):

vhost: fix build broken by 0bfcd599e3f5c5679cc7d0165a0a1822e2f60de2

revert over-zealous PRIu64 conversion from
0bfcd599e3f5c5679cc7d0165a0a1822e2f60de2

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

---

Does this help?
Michael S. Tsirkin - May 27, 2010, 10:53 a.m.
On Thu, May 27, 2010 at 12:55:49PM +0200, Jes Sorensen wrote:
> On 05/27/10 12:44, Michael S. Tsirkin wrote:
> > On Thu, May 27, 2010 at 12:22:29PM +0200, Jes.Sorensen@redhat.com wrote:
> >> From: Jes Sorensen <Jes.Sorensen@redhat.com>
> >>
> >> Fix build failure introduced by 0bfcd599e3f5c5679cc7d0165a0a1822e2f60de2
> >>
> >> The format statement expects unsigned long on x86_64, but receives
> >> unsigned long long, so gcc exits with an error.
> >>
> >> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
> > 
> > I think this part of 0bfcd599e3f5c5679cc7d0165a0a1822e2f60de2
> > should just be reverted. We have unsigned long, it should be printed
> > woith %ll. Casting to uint64_t just so we can print with PRIu64 seems silly.
> 
> That is an option too. Problem is just that unsigned long is 32 bit on
> 32 bit systems and Windows (even for 64 bit) so if we need more flags we
> need to be careful with it.
> 
> Cheers,
> Jes

I don't understand, sorry.
This field is unsigned long long, not unsigned long.
%ll will print unsigned long long
for any standard printf, whatever its length.
Michael S. Tsirkin - May 27, 2010, 10:54 a.m.
On Thu, May 27, 2010 at 12:55:49PM +0200, Jes Sorensen wrote:
> On 05/27/10 12:44, Michael S. Tsirkin wrote:
> > On Thu, May 27, 2010 at 12:22:29PM +0200, Jes.Sorensen@redhat.com wrote:
> >> From: Jes Sorensen <Jes.Sorensen@redhat.com>
> >>
> >> Fix build failure introduced by 0bfcd599e3f5c5679cc7d0165a0a1822e2f60de2
> >>
> >> The format statement expects unsigned long on x86_64, but receives
> >> unsigned long long, so gcc exits with an error.
> >>
> >> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
> > 
> > I think this part of 0bfcd599e3f5c5679cc7d0165a0a1822e2f60de2
> > should just be reverted. We have unsigned long, it should be printed
> > woith %ll. Casting to uint64_t just so we can print with PRIu64 seems silly.
> 
> That is an option too.

More importantly does this fix the problem for you?

> Problem is just that unsigned long is 32 bit on
> 32 bit systems and Windows (even for 64 bit) so if we need more flags we
> need to be careful with it.
> 
> Cheers,
> Jes
Jes Sorensen - May 27, 2010, 10:55 a.m.
On 05/27/10 12:44, Michael S. Tsirkin wrote:
> On Thu, May 27, 2010 at 12:22:29PM +0200, Jes.Sorensen@redhat.com wrote:
>> From: Jes Sorensen <Jes.Sorensen@redhat.com>
>>
>> Fix build failure introduced by 0bfcd599e3f5c5679cc7d0165a0a1822e2f60de2
>>
>> The format statement expects unsigned long on x86_64, but receives
>> unsigned long long, so gcc exits with an error.
>>
>> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
> 
> I think this part of 0bfcd599e3f5c5679cc7d0165a0a1822e2f60de2
> should just be reverted. We have unsigned long, it should be printed
> woith %ll. Casting to uint64_t just so we can print with PRIu64 seems silly.

That is an option too. Problem is just that unsigned long is 32 bit on
32 bit systems and Windows (even for 64 bit) so if we need more flags we
need to be careful with it.

Cheers,
Jes
Jes Sorensen - May 27, 2010, 10:59 a.m.
On 05/27/10 12:53, Michael S. Tsirkin wrote:
> On Thu, May 27, 2010 at 12:55:49PM +0200, Jes Sorensen wrote:
>> On 05/27/10 12:44, Michael S. Tsirkin wrote:
>>> I think this part of 0bfcd599e3f5c5679cc7d0165a0a1822e2f60de2
>>> should just be reverted. We have unsigned long, it should be printed
>>> woith %ll. Casting to uint64_t just so we can print with PRIu64 seems silly.
>>
>> That is an option too. Problem is just that unsigned long is 32 bit on
>> 32 bit systems and Windows (even for 64 bit) so if we need more flags we
>> need to be careful with it.
>>
>> Cheers,
>> Jes
> 
> I don't understand, sorry.
> This field is unsigned long long, not unsigned long.
> %ll will print unsigned long long
> for any standard printf, whatever its length.

Ah ok, if the field is long long, then your patch should be just fine. I
hadn't checked that was the case.

Cheers,
Jes
Jes Sorensen - May 27, 2010, 11:04 a.m.
On 05/27/10 12:54, Michael S. Tsirkin wrote:
> On Thu, May 27, 2010 at 12:55:49PM +0200, Jes Sorensen wrote:
>> On 05/27/10 12:44, Michael S. Tsirkin wrote:
>>> On Thu, May 27, 2010 at 12:22:29PM +0200, Jes.Sorensen@redhat.com wrote:
>>>> From: Jes Sorensen <Jes.Sorensen@redhat.com>
>>>>
>>>> Fix build failure introduced by 0bfcd599e3f5c5679cc7d0165a0a1822e2f60de2
>>>>
>>>> The format statement expects unsigned long on x86_64, but receives
>>>> unsigned long long, so gcc exits with an error.
>>>>
>>>> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
>>>
>>> I think this part of 0bfcd599e3f5c5679cc7d0165a0a1822e2f60de2
>>> should just be reverted. We have unsigned long, it should be printed
>>> woith %ll. Casting to uint64_t just so we can print with PRIu64 seems silly.
>>
>> That is an option too.
> 
> More importantly does this fix the problem for you?

Yes it works fine.

Acked-by: Jes Sorensen <Jes.Sorensen@redhat.com>

Patch

diff --git a/hw/vhost_net.c b/hw/vhost_net.c
index 26dae79..2e292ee 100644
--- a/hw/vhost_net.c
+++ b/hw/vhost_net.c
@@ -99,7 +99,7 @@  struct vhost_net *vhost_net_init(VLANClientState *backend, int devfd)
         goto fail;
     }
     if (~net->dev.features & net->dev.backend_features) {
-        fprintf(stderr, "vhost lacks feature mask %" PRIu64 " for backend\n",
+        fprintf(stderr, "vhost lacks feature mask %llu for backend\n",
                 ~net->dev.features & net->dev.backend_features);
         vhost_dev_cleanup(&net->dev);
         goto fail;