diff mbox

[PULL,0/19] xen-2015-09-08-tag

Message ID alpine.DEB.2.02.1509101122570.2672@kaball.uk.xensource.com
State New
Headers show

Commit Message

Stefano Stabellini Sept. 10, 2015, 10:29 a.m. UTC
CC Michael

On Thu, 10 Sep 2015, Stefano Stabellini wrote:
> On Thu, 10 Sep 2015, Chen, Tiejun wrote:
> > > xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
> > > was set by configure. That won't be the case on OSX or Windows, where
> > > the Xen headers don't exist.
> > > 
> > 
> > Okay. This actually shouldn't be enabled on Windows so what about this?
> 
> I think it would be nicer to replace the pread than introducing ifdefs.

Something like:

---
Replace pread with read to avoid build breakages on Windows

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

Comments

Michael S. Tsirkin Sept. 10, 2015, 10:46 a.m. UTC | #1
On Thu, Sep 10, 2015 at 11:29:18AM +0100, Stefano Stabellini wrote:
> CC Michael
> 
> On Thu, 10 Sep 2015, Stefano Stabellini wrote:
> > On Thu, 10 Sep 2015, Chen, Tiejun wrote:
> > > > xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
> > > > was set by configure. That won't be the case on OSX or Windows, where
> > > > the Xen headers don't exist.
> > > > 
> > > 
> > > Okay. This actually shouldn't be enabled on Windows so what about this?
> > 
> > I think it would be nicer to replace the pread than introducing ifdefs.
> 
> Something like:
> 
> ---
> Replace pread with read to avoid build breakages on Windows
> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

I'd prefer a wrapper that does the right thing.
No sense in doubling the # of system calls for everyone.

> 
> diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> index 58a33fb..9a40429 100644
> --- a/hw/pci-host/piix.c
> +++ b/hw/pci-host/piix.c
> @@ -774,8 +774,11 @@ static int host_pci_config_read(int pos, int len, uint32_t val)
>          return -ENODEV;
>      }
>  
> +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> +        return -errno;
> +    }
>      do {
> -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> +        rc = read(config_fd, (uint8_t *)&val, len);
>      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
>      if (rc != len) {
>          return -errno;
Stefano Stabellini Sept. 10, 2015, 11:26 a.m. UTC | #2
On Thu, 10 Sep 2015, Michael S. Tsirkin wrote:
> On Thu, Sep 10, 2015 at 11:29:18AM +0100, Stefano Stabellini wrote:
> > CC Michael
> > 
> > On Thu, 10 Sep 2015, Stefano Stabellini wrote:
> > > On Thu, 10 Sep 2015, Chen, Tiejun wrote:
> > > > > xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
> > > > > was set by configure. That won't be the case on OSX or Windows, where
> > > > > the Xen headers don't exist.
> > > > > 
> > > > 
> > > > Okay. This actually shouldn't be enabled on Windows so what about this?
> > > 
> > > I think it would be nicer to replace the pread than introducing ifdefs.
> > 
> > Something like:
> > 
> > ---
> > Replace pread with read to avoid build breakages on Windows
> > 
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> 
> I'd prefer a wrapper that does the right thing.
> No sense in doubling the # of system calls for everyone.

If this was done on an hot path I would agree with you, but it is just
one call at initialization time (igd_pt_i440fx_initfn).


> > diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> > index 58a33fb..9a40429 100644
> > --- a/hw/pci-host/piix.c
> > +++ b/hw/pci-host/piix.c
> > @@ -774,8 +774,11 @@ static int host_pci_config_read(int pos, int len, uint32_t val)
> >          return -ENODEV;
> >      }
> >  
> > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> > +        return -errno;
> > +    }
> >      do {
> > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> > +        rc = read(config_fd, (uint8_t *)&val, len);
> >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
> >      if (rc != len) {
> >          return -errno;
>
Michael S. Tsirkin Sept. 10, 2015, noon UTC | #3
On Thu, Sep 10, 2015 at 12:26:21PM +0100, Stefano Stabellini wrote:
> On Thu, 10 Sep 2015, Michael S. Tsirkin wrote:
> > On Thu, Sep 10, 2015 at 11:29:18AM +0100, Stefano Stabellini wrote:
> > > CC Michael
> > > 
> > > On Thu, 10 Sep 2015, Stefano Stabellini wrote:
> > > > On Thu, 10 Sep 2015, Chen, Tiejun wrote:
> > > > > > xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
> > > > > > was set by configure. That won't be the case on OSX or Windows, where
> > > > > > the Xen headers don't exist.
> > > > > > 
> > > > > 
> > > > > Okay. This actually shouldn't be enabled on Windows so what about this?
> > > > 
> > > > I think it would be nicer to replace the pread than introducing ifdefs.
> > > 
> > > Something like:
> > > 
> > > ---
> > > Replace pread with read to avoid build breakages on Windows
> > > 
> > > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > 
> > I'd prefer a wrapper that does the right thing.
> > No sense in doubling the # of system calls for everyone.
> 
> If this was done on an hot path I would agree with you, but it is just
> one call at initialization time (igd_pt_i440fx_initfn).

I missed this fact. OK then.

> 
> > > diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> > > index 58a33fb..9a40429 100644
> > > --- a/hw/pci-host/piix.c
> > > +++ b/hw/pci-host/piix.c
> > > @@ -774,8 +774,11 @@ static int host_pci_config_read(int pos, int len, uint32_t val)
> > >          return -ENODEV;
> > >      }
> > >  
> > > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> > > +        return -errno;
> > > +    }
> > >      do {
> > > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> > > +        rc = read(config_fd, (uint8_t *)&val, len);
> > >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
> > >      if (rc != len) {
> > >          return -errno;
> >
Stefano Stabellini Sept. 10, 2015, noon UTC | #4
On Thu, 10 Sep 2015, Michael S. Tsirkin wrote:
> On Thu, Sep 10, 2015 at 12:26:21PM +0100, Stefano Stabellini wrote:
> > On Thu, 10 Sep 2015, Michael S. Tsirkin wrote:
> > > On Thu, Sep 10, 2015 at 11:29:18AM +0100, Stefano Stabellini wrote:
> > > > CC Michael
> > > > 
> > > > On Thu, 10 Sep 2015, Stefano Stabellini wrote:
> > > > > On Thu, 10 Sep 2015, Chen, Tiejun wrote:
> > > > > > > xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
> > > > > > > was set by configure. That won't be the case on OSX or Windows, where
> > > > > > > the Xen headers don't exist.
> > > > > > > 
> > > > > > 
> > > > > > Okay. This actually shouldn't be enabled on Windows so what about this?
> > > > > 
> > > > > I think it would be nicer to replace the pread than introducing ifdefs.
> > > > 
> > > > Something like:
> > > > 
> > > > ---
> > > > Replace pread with read to avoid build breakages on Windows
> > > > 
> > > > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > > 
> > > I'd prefer a wrapper that does the right thing.
> > > No sense in doubling the # of system calls for everyone.
> > 
> > If this was done on an hot path I would agree with you, but it is just
> > one call at initialization time (igd_pt_i440fx_initfn).
> 
> I missed this fact. OK then.

Thanks! I'll fold it the offending patch
(http://marc.info/?l=qemu-devel&m=144174596628052&w=2) and resend.


> > > > diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> > > > index 58a33fb..9a40429 100644
> > > > --- a/hw/pci-host/piix.c
> > > > +++ b/hw/pci-host/piix.c
> > > > @@ -774,8 +774,11 @@ static int host_pci_config_read(int pos, int len, uint32_t val)
> > > >          return -ENODEV;
> > > >      }
> > > >  
> > > > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> > > > +        return -errno;
> > > > +    }
> > > >      do {
> > > > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> > > > +        rc = read(config_fd, (uint8_t *)&val, len);
> > > >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
> > > >      if (rc != len) {
> > > >          return -errno;
> > > 
>
Michael S. Tsirkin Sept. 10, 2015, 12:13 p.m. UTC | #5
On Thu, Sep 10, 2015 at 01:00:35PM +0100, Stefano Stabellini wrote:
> On Thu, 10 Sep 2015, Michael S. Tsirkin wrote:
> > On Thu, Sep 10, 2015 at 12:26:21PM +0100, Stefano Stabellini wrote:
> > > On Thu, 10 Sep 2015, Michael S. Tsirkin wrote:
> > > > On Thu, Sep 10, 2015 at 11:29:18AM +0100, Stefano Stabellini wrote:
> > > > > CC Michael
> > > > > 
> > > > > On Thu, 10 Sep 2015, Stefano Stabellini wrote:
> > > > > > On Thu, 10 Sep 2015, Chen, Tiejun wrote:
> > > > > > > > xen-host-pci-device.c is only compiled if CONFIG_XEN_PCI_PASSTHROUGH
> > > > > > > > was set by configure. That won't be the case on OSX or Windows, where
> > > > > > > > the Xen headers don't exist.
> > > > > > > > 
> > > > > > > 
> > > > > > > Okay. This actually shouldn't be enabled on Windows so what about this?
> > > > > > 
> > > > > > I think it would be nicer to replace the pread than introducing ifdefs.
> > > > > 
> > > > > Something like:
> > > > > 
> > > > > ---
> > > > > Replace pread with read to avoid build breakages on Windows
> > > > > 
> > > > > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > > > 
> > > > I'd prefer a wrapper that does the right thing.
> > > > No sense in doubling the # of system calls for everyone.
> > > 
> > > If this was done on an hot path I would agree with you, but it is just
> > > one call at initialization time (igd_pt_i440fx_initfn).
> > 
> > I missed this fact. OK then.
> 
> Thanks! I'll fold it the offending patch
> (http://marc.info/?l=qemu-devel&m=144174596628052&w=2) and resend.
> 

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


> > > > > diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
> > > > > index 58a33fb..9a40429 100644
> > > > > --- a/hw/pci-host/piix.c
> > > > > +++ b/hw/pci-host/piix.c
> > > > > @@ -774,8 +774,11 @@ static int host_pci_config_read(int pos, int len, uint32_t val)
> > > > >          return -ENODEV;
> > > > >      }
> > > > >  
> > > > > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> > > > > +        return -errno;
> > > > > +    }
> > > > >      do {
> > > > > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> > > > > +        rc = read(config_fd, (uint8_t *)&val, len);
> > > > >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
> > > > >      if (rc != len) {
> > > > >          return -errno;
> > > > 
> >
Tiejun Chen Sept. 11, 2015, 12:40 a.m. UTC | #6
>> Thanks! I'll fold it the offending patch
>> (http://marc.info/?l=qemu-devel&m=144174596628052&w=2) and resend.
>>
>
> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
>

Michale and Stefano,

Thanks a lot :)

Tiejun
Paolo Bonzini Sept. 14, 2015, 9:57 a.m. UTC | #7
On 10/09/2015 12:29, Stefano Stabellini wrote:
> +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> +        return -errno;
> +    }
>      do {
> -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> +        rc = read(config_fd, (uint8_t *)&val, len);
>      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));

This leaks config_fd.

Paolo
Stefano Stabellini Sept. 15, 2015, 9:55 a.m. UTC | #8
On Mon, 14 Sep 2015, Paolo Bonzini wrote:
> On 10/09/2015 12:29, Stefano Stabellini wrote:
> > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> > +        return -errno;
> > +    }
> >      do {
> > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> > +        rc = read(config_fd, (uint8_t *)&val, len);
> >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
> 
> This leaks config_fd.

I don't follow, it leaks config_fd where?
Paolo Bonzini Sept. 15, 2015, 11 a.m. UTC | #9
On 15/09/2015 11:55, Stefano Stabellini wrote:
> On Mon, 14 Sep 2015, Paolo Bonzini wrote:
>> > On 10/09/2015 12:29, Stefano Stabellini wrote:
>>> > > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
>>> > > +        return -errno;
>>> > > +    }
>>> > >      do {
>>> > > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
>>> > > +        rc = read(config_fd, (uint8_t *)&val, len);
>>> > >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
>> > 
>> > This leaks config_fd.
> I don't follow, it leaks config_fd where?

Where lseek returns -errno (and IIRC in other places in the same function).

Paolo
diff mbox

Patch

diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
index 58a33fb..9a40429 100644
--- a/hw/pci-host/piix.c
+++ b/hw/pci-host/piix.c
@@ -774,8 +774,11 @@  static int host_pci_config_read(int pos, int len, uint32_t val)
         return -ENODEV;
     }
 
+    if (lseek(config_fd, pos, SEEK_SET) != pos) {
+        return -errno;
+    }
     do {
-        rc = pread(config_fd, (uint8_t *)&val, len, pos);
+        rc = read(config_fd, (uint8_t *)&val, len);
     } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
     if (rc != len) {
         return -errno;