[dpdk-dev] [PATCH] pci: Add the class_id support in pci probe

Yang, Ziye ziye.yang at intel.com
Thu May 19 14:18:19 CEST 2016



-----Original Message-----
From: Thomas Monjalon [mailto:thomas.monjalon at 6wind.com] 
Sent: Thursday, May 19, 2016 6:34 PM
To: Yang, Ziye <ziye.yang at intel.com>
Cc: dev at dpdk.org
Subject: Re: [dpdk-dev] [PATCH] pci: Add the class_id support in pci probe

2016-05-11 14:08, Ziye Yang:
> This patch is used to add the class_id (class_code, subclass_code, 
> programming_interface) support for pci_device probe. With this patch, 
> it will be flexible for users to probe a class of devices by class_id.
> 
> Signed-off-by: Ziye Yang <ziye.yang at intel.com>
> ---
>  lib/librte_eal/bsdapp/eal/eal_pci.c     | 4 ++++
>  lib/librte_eal/common/eal_common_pci.c  | 3 +++  
> lib/librte_eal/common/include/rte_pci.h | 8 ++++++--
>  lib/librte_eal/linuxapp/eal/eal_pci.c   | 9 +++++++++
>  4 files changed, 22 insertions(+), 2 deletions(-)

Please remove the deprecation notice.

> --- a/lib/librte_eal/common/include/rte_pci.h
> +++ b/lib/librte_eal/common/include/rte_pci.h
> @@ -129,6 +129,7 @@ struct rte_pci_id {
>  	uint16_t device_id;           /**< Device ID or PCI_ANY_ID. */
>  	uint16_t subsystem_vendor_id; /**< Subsystem vendor ID or PCI_ANY_ID. */
>  	uint16_t subsystem_device_id; /**< Subsystem device ID or 
> PCI_ANY_ID. */
> +	uint32_t class_id;           /**< Class ID (class, subclass, pi) or CLASS_ANY_ID. */
>  };

A space is missing.
It would be more logical to put the class_id at the beginning of the struct.

>  /** Any PCI device identifier (vendor, device, ...) */  #define 
> PCI_ANY_ID (0xffff)
> +#define CLASS_ANY_ID (0xffffff)

These constants should be prefixed with RTE_.
[Ziye] suggest for doing another patch to change PCI_ANY_ID to RTE_PCI_ANY_ID since it will affect 
Other files.

> --- a/lib/librte_eal/linuxapp/eal/eal_pci.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
> +	/* get class_id */
> +	snprintf(filename, sizeof(filename), "%s/class",
> +		 dirname);
> +	if (eal_parse_sysfs_value(filename, &tmp) < 0) {
> +		free(dev);
> +		return -1;
> +	}
> +	dev->id.class_id = (uint32_t)tmp && CLASS_ANY_ID;

Should be a bitwise &. Why masking is needed?
[Ziye]  Only 24bit info is needed.


More information about the dev mailing list