[dpdk-dev,v3,04/12] linuxapp/vfio: ignore mapping for ioport region

Message ID 1452184390-5994-5-git-send-email-sshukla@mvista.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Santosh Shukla Jan. 7, 2016, 4:33 p.m. UTC
  vfio_pci_mmap() try to map all pci bars. ioport region ar not mapped in
vfio/kernel so ignore mmaping for ioport.

Signed-off-by: Santosh Shukla <sshukla@mvista.com>
---
 lib/librte_eal/linuxapp/eal/eal_pci_vfio.c |   20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
  

Comments

Stephen Hemminger Jan. 7, 2016, 6:16 p.m. UTC | #1
This looks like the right thing to do. Minor nits.

> diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
> index 74f91ba..4077eb6 100644
> --- a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
> @@ -760,6 +760,26 @@ pci_vfio_map_resource(struct rte_pci_device *dev)
>  			return -1;
>  		}
>  
> +		/* chk for io port region */
> +		uint32_t ioport_bar;

In general DPDK has followed the kernel practice of putting declarations
at the start of function/basic block. It is ok by me, but just noting that
the rest of the code doesn't do it.

> +		ret = pread64(vfio_dev_fd, &ioport_bar, sizeof(ioport_bar),
> +			      VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX)
> +			      + PCI_BASE_ADDRESS_0 + i*4);
> +
> +		if (ret != sizeof(ioport_bar)) {
> +			RTE_LOG(ERR, EAL,
> +				"Cannot read command (%x) from PCI config"
> +				"space!\n", PCI_BASE_ADDRESS_0 + i*4);

Please dont split the line of a log message string in mid sentence.

> +			return -1;
> +		}
> +
> +		if (ioport_bar & PCI_BASE_ADDRESS_SPACE_IO) {
> +			RTE_LOG(INFO, EAL, "\tIgnore mapping since Its a i/o"
> +					   "port bar (%d) addr : %x\n", i,
same here

> +					   ioport_bar);
> +			continue;
> +		}
> +
  
Santosh Shukla Jan. 7, 2016, 6:53 p.m. UTC | #2
On Thu, Jan 7, 2016 at 11:46 PM, Stephen Hemminger <
stephen@networkplumber.org> wrote:

> This looks like the right thing to do. Minor nits.
>
> > diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
> b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
> > index 74f91ba..4077eb6 100644
> > --- a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
> > +++ b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
> > @@ -760,6 +760,26 @@ pci_vfio_map_resource(struct rte_pci_device *dev)
> >                       return -1;
> >               }
> >
> > +             /* chk for io port region */
> > +             uint32_t ioport_bar;
>
> In general DPDK has followed the kernel practice of putting declarations
> at the start of function/basic block. It is ok by me, but just noting that
> the rest of the code doesn't do it.
>
>
My bad, Thanks!


> > +             ret = pread64(vfio_dev_fd, &ioport_bar, sizeof(ioport_bar),
> > +
>  VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX)
> > +                           + PCI_BASE_ADDRESS_0 + i*4);
> > +
> > +             if (ret != sizeof(ioport_bar)) {
> > +                     RTE_LOG(ERR, EAL,
> > +                             "Cannot read command (%x) from PCI config"
> > +                             "space!\n", PCI_BASE_ADDRESS_0 + i*4);
>
> Please dont split the line of a log message string in mid sentence.
>
>
me to don't like splitting, This was deliberate to keep checkpatch happy,
If we are ok with debug message > 80 line warning I guess  it will improve
code readability.

> +                     return -1;
> > +             }
> > +
> > +             if (ioport_bar & PCI_BASE_ADDRESS_SPACE_IO) {
> > +                     RTE_LOG(INFO, EAL, "\tIgnore mapping since Its a
> i/o"
> > +                                        "port bar (%d) addr : %x\n", i,
> same here
>
> Agreed.


> > +                                        ioport_bar);
> > +                     continue;
> > +             }
> > +
>
  
Yuanhan Liu Jan. 8, 2016, 7:29 a.m. UTC | #3
On Fri, Jan 08, 2016 at 12:23:15AM +0530, Santosh Shukla wrote:
> 
> 
> On Thu, Jan 7, 2016 at 11:46 PM, Stephen Hemminger <stephen@networkplumber.org>
> wrote:
>  
> 
>     > +             ret = pread64(vfio_dev_fd, &ioport_bar, sizeof(ioport_bar),
>     > +                           VFIO_GET_REGION_ADDR
>     (VFIO_PCI_CONFIG_REGION_INDEX)
>     > +                           + PCI_BASE_ADDRESS_0 + i*4);
>     > +
>     > +             if (ret != sizeof(ioport_bar)) {
>     > +                     RTE_LOG(ERR, EAL,
>     > +                             "Cannot read command (%x) from PCI config"
>     > +                             "space!\n", PCI_BASE_ADDRESS_0 + i*4);
> 
>     Please dont split the line of a log message string in mid sentence.
>    

First of all, it'd be good if you can fix your email client to reply
emails in a way open source world prefer, such as prefixing last email
with leading '> ', and do not auto fold lines.

> me to don't like splitting, This was deliberate to keep checkpatch happy, If we
> are ok with debug message > 80 line warning I guess  it will improve code
> readability.

You may try to shorten your message to "Cannot read cmd %x from config
space!" :)

> 
> 
>     > +                     return -1;
>     > +             }
>     > +
>     > +             if (ioport_bar & PCI_BASE_ADDRESS_SPACE_IO) {
>     > +                     RTE_LOG(INFO, EAL, "\tIgnore mapping since Its a i/
>     o"
>     > +                                        "port bar (%d) addr : %x\n", i,
>     same here
> 
> 
> Agreed.

Ditto, maybe following is better

    "Ignore mapping IO port bar %d, addr: %x\n".

	--yliu
  

Patch

diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
index 74f91ba..4077eb6 100644
--- a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
+++ b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
@@ -760,6 +760,26 @@  pci_vfio_map_resource(struct rte_pci_device *dev)
 			return -1;
 		}
 
+		/* chk for io port region */
+		uint32_t ioport_bar;
+		ret = pread64(vfio_dev_fd, &ioport_bar, sizeof(ioport_bar),
+			      VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX)
+			      + PCI_BASE_ADDRESS_0 + i*4);
+
+		if (ret != sizeof(ioport_bar)) {
+			RTE_LOG(ERR, EAL,
+				"Cannot read command (%x) from PCI config"
+				"space!\n", PCI_BASE_ADDRESS_0 + i*4);
+			return -1;
+		}
+
+		if (ioport_bar & PCI_BASE_ADDRESS_SPACE_IO) {
+			RTE_LOG(INFO, EAL, "\tIgnore mapping since Its a i/o"
+					   "port bar (%d) addr : %x\n", i,
+					   ioport_bar);
+			continue;
+		}
+
 		/* skip non-mmapable BARs */
 		if ((reg.flags & VFIO_REGION_INFO_FLAG_MMAP) == 0)
 			continue;