RE: [PATCH 02/22] NTB: Add peer indexed ports NTB API

2016-12-07 Thread Allen Hubbe
From: Allen Hubbe
> From: Serge Semin
> > Add new port-index NTB API. Additionally lets get rid of Primary and
> > Secondary topologies, since port-number can be effectively used instead.
> 
> Split into two patches please.
> 
> I see no harm to the TOPO changes, though I wonder if they are necessary.
> 

I am leaning more toward recommending that the topo api be left alone.

The topo changes to the ntb api complicate the Intel driver:
 - The changes add second branches where there had been just one before (need 
to check topo AND port now).
 - The changes also cause some complicated merge conflicts with 
https://github.com/davejiang/linux.git ntb.

See RE: [PATCH 10/22] NTB Intel: Add port-related NTB API callback methods

If we leave the ntb topo api as it was, then on multiport devices, if the local 
port is not the primary port, let it be one of potentially many secondary 
ports.  Or, if there is no distinction between primary/secondary on some 
hardware, let them all be primary.

This topo api doesn't have much value for existing drivers (that I know of), 
except for informative purposes.  So, my preference for changing it would be, 
only if necessary, and to minimize changes otherwise.

Allen



RE: [PATCH 02/22] NTB: Add peer indexed ports NTB API

2016-12-07 Thread Allen Hubbe
From: Allen Hubbe
> From: Serge Semin
> > Add new port-index NTB API. Additionally lets get rid of Primary and
> > Secondary topologies, since port-number can be effectively used instead.
> 
> Split into two patches please.
> 
> I see no harm to the TOPO changes, though I wonder if they are necessary.
> 

I am leaning more toward recommending that the topo api be left alone.

The topo changes to the ntb api complicate the Intel driver:
 - The changes add second branches where there had been just one before (need 
to check topo AND port now).
 - The changes also cause some complicated merge conflicts with 
https://github.com/davejiang/linux.git ntb.

See RE: [PATCH 10/22] NTB Intel: Add port-related NTB API callback methods

If we leave the ntb topo api as it was, then on multiport devices, if the local 
port is not the primary port, let it be one of potentially many secondary 
ports.  Or, if there is no distinction between primary/secondary on some 
hardware, let them all be primary.

This topo api doesn't have much value for existing drivers (that I know of), 
except for informative purposes.  So, my preference for changing it would be, 
only if necessary, and to minimize changes otherwise.

Allen



RE: [PATCH 02/22] NTB: Add peer indexed ports NTB API

2016-12-03 Thread Allen Hubbe
From: Serge Semin
> Add new port-index NTB API. Additionally lets get rid of Primary and
> Secondary topologies, since port-number can be effectively used instead.

Split into two patches please.

I see no harm to the TOPO changes, though I wonder if they are necessary.

> Signed-off-by: Serge Semin 
> 
> ---
>  include/linux/ntb.h | 101 
> 
>  1 file changed, 79 insertions(+), 22 deletions(-)
> 
> diff --git a/include/linux/ntb.h b/include/linux/ntb.h
> index 5d1f260..0941a43 100644
> --- a/include/linux/ntb.h
> +++ b/include/linux/ntb.h
> @@ -64,37 +64,21 @@ struct pci_dev;
>  /**
>   * enum ntb_topo - NTB connection topology
>   * @NTB_TOPO_NONE:   Topology is unknown or invalid.
> - * @NTB_TOPO_PRI:On primary side of local ntb.
> - * @NTB_TOPO_SEC:On secondary side of remote ntb.
> - * @NTB_TOPO_B2B_USD:On primary side of local ntb upstream of remote 
> ntb.
> - * @NTB_TOPO_B2B_DSD:On primary side of local ntb downstream of 
> remote ntb.
> + * @NTB_TOPO_P2P:Simple port-to-port NTB topology
> + * @NTB_TOPO_B2B:Bridge-to-bridge NTB topology
>   */
>  enum ntb_topo {
>   NTB_TOPO_NONE = -1,
> - NTB_TOPO_PRI,
> - NTB_TOPO_SEC,
> - NTB_TOPO_B2B_USD,
> - NTB_TOPO_B2B_DSD,
> + NTB_TOPO_P2P,
> + NTB_TOPO_B2B
>  };
> 
> -static inline int ntb_topo_is_b2b(enum ntb_topo topo)
> -{
> - switch ((int)topo) {
> - case NTB_TOPO_B2B_USD:
> - case NTB_TOPO_B2B_DSD:
> - return 1;
> - }
> - return 0;
> -}
> -
>  static inline char *ntb_topo_string(enum ntb_topo topo)
>  {
>   switch (topo) {
>   case NTB_TOPO_NONE: return "NTB_TOPO_NONE";
> - case NTB_TOPO_PRI:  return "NTB_TOPO_PRI";
> - case NTB_TOPO_SEC:  return "NTB_TOPO_SEC";
> - case NTB_TOPO_B2B_USD:  return "NTB_TOPO_B2B_USD";
> - case NTB_TOPO_B2B_DSD:  return "NTB_TOPO_B2B_DSD";
> + case NTB_TOPO_P2P:  return "NTB_TOPO_P2P";
> + case NTB_TOPO_B2B:  return "NTB_TOPO_B2B";
>   }
>   return "NTB_TOPO_INVALID";
>  }
> @@ -179,6 +163,10 @@ static inline int ntb_ctx_ops_is_valid(const struct 
> ntb_ctx_ops *ops)
> 
>  /**
>   * struct ntb_ctx_ops - ntb device operations
> + * @port_number: See ntb_port_number().
> + * @peer_port_count: See ntb_peer_port_count().
> + * @peer_port_number:See ntb_peer_port_number().
> + * @peer_port_idx:   See ntb_peer_port_idx().
>   * @link_is_up:  See ntb_link_is_up().
>   * @link_enable: See ntb_link_enable().
>   * @link_disable:See ntb_link_disable().
> @@ -212,6 +200,11 @@ static inline int ntb_ctx_ops_is_valid(const struct 
> ntb_ctx_ops *ops)
>   * @peer_spad_write: See ntb_peer_spad_write().
>   */
>  struct ntb_dev_ops {
> + int (*port_number)(struct ntb_dev *ntb);
> + int (*peer_port_count)(struct ntb_dev *ntb);
> + int (*peer_port_number)(struct ntb_dev *ntb, int pidx);
> + int (*peer_port_idx)(struct ntb_dev *ntb, int port);
> +
>   int (*link_is_up)(struct ntb_dev *ntb,
> enum ntb_speed *speed, enum ntb_width *width);
>   int (*link_enable)(struct ntb_dev *ntb,
> @@ -265,6 +258,10 @@ static inline int ntb_dev_ops_is_valid(const struct 
> ntb_dev_ops *ops)
>  {
>   /* commented callbacks are not required: */
>   return
> + ops->port_number&&
> + ops->peer_port_count&&
> + ops->peer_port_number   &&
> + ops->peer_port_idx  &&
>   ops->link_is_up &&
>   ops->link_enable&&
>   ops->link_disable   &&
> @@ -319,6 +316,7 @@ struct ntb_client {
>   * @dev: Linux device object.
>   * @pdev:Pci device entry of the ntb.
>   * @topo:Detected topology of the ntb.
> + * @port:Local port of the ntb.
>   * @ops: See _dev_ops.
>   * @ctx: See _ctx_ops.
>   * @ctx_ops: See _ctx_ops.
> @@ -327,6 +325,7 @@ struct ntb_dev {
>   struct device   dev;
>   struct pci_dev  *pdev;
>   enum ntb_topo   topo;
> + int port;
>   const struct ntb_dev_ops*ops;
>   void*ctx;
>   const struct ntb_ctx_ops*ctx_ops;
> @@ -442,6 +441,64 @@ void ntb_link_event(struct ntb_dev *ntb);
>  void ntb_db_event(struct ntb_dev *ntb, int vector);
> 
>  /**
> + * ntb_port_number() - get the local port number
> + * @ntb: NTB device context.
> + *
> + * Hardware must support at least simple two-ports topology
> + *
> + * Return: the local port number
> + */
> +static inline int ntb_port_number(struct ntb_dev *ntb)
> +{
> + return ntb->ops->port_number(ntb);
> +}
> +
> +/**
> + * ntb_peer_port_count() - 

RE: [PATCH 02/22] NTB: Add peer indexed ports NTB API

2016-12-03 Thread Allen Hubbe
From: Serge Semin
> Add new port-index NTB API. Additionally lets get rid of Primary and
> Secondary topologies, since port-number can be effectively used instead.

Split into two patches please.

I see no harm to the TOPO changes, though I wonder if they are necessary.

> Signed-off-by: Serge Semin 
> 
> ---
>  include/linux/ntb.h | 101 
> 
>  1 file changed, 79 insertions(+), 22 deletions(-)
> 
> diff --git a/include/linux/ntb.h b/include/linux/ntb.h
> index 5d1f260..0941a43 100644
> --- a/include/linux/ntb.h
> +++ b/include/linux/ntb.h
> @@ -64,37 +64,21 @@ struct pci_dev;
>  /**
>   * enum ntb_topo - NTB connection topology
>   * @NTB_TOPO_NONE:   Topology is unknown or invalid.
> - * @NTB_TOPO_PRI:On primary side of local ntb.
> - * @NTB_TOPO_SEC:On secondary side of remote ntb.
> - * @NTB_TOPO_B2B_USD:On primary side of local ntb upstream of remote 
> ntb.
> - * @NTB_TOPO_B2B_DSD:On primary side of local ntb downstream of 
> remote ntb.
> + * @NTB_TOPO_P2P:Simple port-to-port NTB topology
> + * @NTB_TOPO_B2B:Bridge-to-bridge NTB topology
>   */
>  enum ntb_topo {
>   NTB_TOPO_NONE = -1,
> - NTB_TOPO_PRI,
> - NTB_TOPO_SEC,
> - NTB_TOPO_B2B_USD,
> - NTB_TOPO_B2B_DSD,
> + NTB_TOPO_P2P,
> + NTB_TOPO_B2B
>  };
> 
> -static inline int ntb_topo_is_b2b(enum ntb_topo topo)
> -{
> - switch ((int)topo) {
> - case NTB_TOPO_B2B_USD:
> - case NTB_TOPO_B2B_DSD:
> - return 1;
> - }
> - return 0;
> -}
> -
>  static inline char *ntb_topo_string(enum ntb_topo topo)
>  {
>   switch (topo) {
>   case NTB_TOPO_NONE: return "NTB_TOPO_NONE";
> - case NTB_TOPO_PRI:  return "NTB_TOPO_PRI";
> - case NTB_TOPO_SEC:  return "NTB_TOPO_SEC";
> - case NTB_TOPO_B2B_USD:  return "NTB_TOPO_B2B_USD";
> - case NTB_TOPO_B2B_DSD:  return "NTB_TOPO_B2B_DSD";
> + case NTB_TOPO_P2P:  return "NTB_TOPO_P2P";
> + case NTB_TOPO_B2B:  return "NTB_TOPO_B2B";
>   }
>   return "NTB_TOPO_INVALID";
>  }
> @@ -179,6 +163,10 @@ static inline int ntb_ctx_ops_is_valid(const struct 
> ntb_ctx_ops *ops)
> 
>  /**
>   * struct ntb_ctx_ops - ntb device operations
> + * @port_number: See ntb_port_number().
> + * @peer_port_count: See ntb_peer_port_count().
> + * @peer_port_number:See ntb_peer_port_number().
> + * @peer_port_idx:   See ntb_peer_port_idx().
>   * @link_is_up:  See ntb_link_is_up().
>   * @link_enable: See ntb_link_enable().
>   * @link_disable:See ntb_link_disable().
> @@ -212,6 +200,11 @@ static inline int ntb_ctx_ops_is_valid(const struct 
> ntb_ctx_ops *ops)
>   * @peer_spad_write: See ntb_peer_spad_write().
>   */
>  struct ntb_dev_ops {
> + int (*port_number)(struct ntb_dev *ntb);
> + int (*peer_port_count)(struct ntb_dev *ntb);
> + int (*peer_port_number)(struct ntb_dev *ntb, int pidx);
> + int (*peer_port_idx)(struct ntb_dev *ntb, int port);
> +
>   int (*link_is_up)(struct ntb_dev *ntb,
> enum ntb_speed *speed, enum ntb_width *width);
>   int (*link_enable)(struct ntb_dev *ntb,
> @@ -265,6 +258,10 @@ static inline int ntb_dev_ops_is_valid(const struct 
> ntb_dev_ops *ops)
>  {
>   /* commented callbacks are not required: */
>   return
> + ops->port_number&&
> + ops->peer_port_count&&
> + ops->peer_port_number   &&
> + ops->peer_port_idx  &&
>   ops->link_is_up &&
>   ops->link_enable&&
>   ops->link_disable   &&
> @@ -319,6 +316,7 @@ struct ntb_client {
>   * @dev: Linux device object.
>   * @pdev:Pci device entry of the ntb.
>   * @topo:Detected topology of the ntb.
> + * @port:Local port of the ntb.
>   * @ops: See _dev_ops.
>   * @ctx: See _ctx_ops.
>   * @ctx_ops: See _ctx_ops.
> @@ -327,6 +325,7 @@ struct ntb_dev {
>   struct device   dev;
>   struct pci_dev  *pdev;
>   enum ntb_topo   topo;
> + int port;
>   const struct ntb_dev_ops*ops;
>   void*ctx;
>   const struct ntb_ctx_ops*ctx_ops;
> @@ -442,6 +441,64 @@ void ntb_link_event(struct ntb_dev *ntb);
>  void ntb_db_event(struct ntb_dev *ntb, int vector);
> 
>  /**
> + * ntb_port_number() - get the local port number
> + * @ntb: NTB device context.
> + *
> + * Hardware must support at least simple two-ports topology
> + *
> + * Return: the local port number
> + */
> +static inline int ntb_port_number(struct ntb_dev *ntb)
> +{
> + return ntb->ops->port_number(ntb);
> +}
> +
> +/**
> + * ntb_peer_port_count() - get the number of peer 

Re: [PATCH 02/22] NTB: Add peer indexed ports NTB API

2016-11-30 Thread kbuild test robot
Hi Serge,

[auto build test WARNING on ntb/ntb-next]
[also build test WARNING on v4.9-rc7 next-20161130]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Serge-Semin/NTB-Alter-kernel-API-to-support-multi-port-devices/20161201-014939
base:   https://github.com/jonmason/ntb ntb-next
reproduce:
# apt-get install sparse
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

   include/linux/compiler.h:253:8: sparse: attribute 'no_sanitize_address': 
unknown attribute
   drivers/ntb/hw/intel/ntb_hw_intel.c:664:13: sparse: undefined identifier 
'ntb_topo_is_b2b'
   drivers/ntb/hw/intel/ntb_hw_intel.c:895:21: sparse: undefined identifier 
'ntb_topo_is_b2b'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1206:31: sparse: undefined identifier 
'NTB_TOPO_SEC'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1235:31: sparse: undefined identifier 
'NTB_TOPO_SEC'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1572:14: sparse: undefined identifier 
'NTB_TOPO_B2B_USD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1573:14: sparse: undefined identifier 
'NTB_TOPO_B2B_DSD'
>> drivers/ntb/hw/intel/ntb_hw_intel.c:1572:14: sparse: incompatible types for 
>> 'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:1573:14: sparse: incompatible types for 
'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:1448:24: sparse: undefined identifier 
'NTB_TOPO_B2B_USD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1452:24: sparse: undefined identifier 
'NTB_TOPO_B2B_DSD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1614:31: sparse: undefined identifier 
'NTB_TOPO_SEC'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1789:14: sparse: undefined identifier 
'NTB_TOPO_B2B_USD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1790:14: sparse: undefined identifier 
'NTB_TOPO_B2B_DSD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1795:39: sparse: undefined identifier 
'NTB_TOPO_B2B_USD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1789:14: sparse: incompatible types for 
'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:1790:14: sparse: incompatible types for 
'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2053:24: sparse: undefined identifier 
'NTB_TOPO_B2B_USD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2056:24: sparse: undefined identifier 
'NTB_TOPO_B2B_DSD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2060:24: sparse: undefined identifier 
'NTB_TOPO_PRI'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2064:24: sparse: undefined identifier 
'NTB_TOPO_SEC'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2043:31: sparse: undefined identifier 
'NTB_TOPO_SEC'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2356:14: sparse: undefined identifier 
'NTB_TOPO_PRI'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2374:14: sparse: undefined identifier 
'NTB_TOPO_SEC'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2386:14: sparse: undefined identifier 
'NTB_TOPO_B2B_USD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2387:14: sparse: undefined identifier 
'NTB_TOPO_B2B_DSD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2416:39: sparse: undefined identifier 
'NTB_TOPO_B2B_USD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2356:14: sparse: incompatible types for 
'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2374:14: sparse: incompatible types for 
'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2386:14: sparse: incompatible types for 
'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2387:14: sparse: incompatible types for 
'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2534:31: sparse: undefined identifier 
'NTB_TOPO_SEC'
   drivers/ntb/hw/intel/ntb_hw_intel.c:232:22: sparse: undefined identifier 
'ntb_topo_is_b2b'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1572:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:1573:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:1789:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:1790:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2356:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2374:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2386:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2387:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'ndev_reset_unsafe_flags':
   drivers/ntb/hw/intel/ntb_hw_intel.c:232:8: error: implicit declaration of 
function 'ntb_topo_is_b2b' [-Werror=implicit-function-declaration]
  if (!ntb_topo_is_b2b(ndev->ntb.topo))
   ^~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'intel_ntb_link_enable':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1206:24: error: 'NTB_TOPO_SEC' 
undeclared 

Re: [PATCH 02/22] NTB: Add peer indexed ports NTB API

2016-11-30 Thread kbuild test robot
Hi Serge,

[auto build test WARNING on ntb/ntb-next]
[also build test WARNING on v4.9-rc7 next-20161130]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Serge-Semin/NTB-Alter-kernel-API-to-support-multi-port-devices/20161201-014939
base:   https://github.com/jonmason/ntb ntb-next
reproduce:
# apt-get install sparse
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

   include/linux/compiler.h:253:8: sparse: attribute 'no_sanitize_address': 
unknown attribute
   drivers/ntb/hw/intel/ntb_hw_intel.c:664:13: sparse: undefined identifier 
'ntb_topo_is_b2b'
   drivers/ntb/hw/intel/ntb_hw_intel.c:895:21: sparse: undefined identifier 
'ntb_topo_is_b2b'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1206:31: sparse: undefined identifier 
'NTB_TOPO_SEC'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1235:31: sparse: undefined identifier 
'NTB_TOPO_SEC'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1572:14: sparse: undefined identifier 
'NTB_TOPO_B2B_USD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1573:14: sparse: undefined identifier 
'NTB_TOPO_B2B_DSD'
>> drivers/ntb/hw/intel/ntb_hw_intel.c:1572:14: sparse: incompatible types for 
>> 'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:1573:14: sparse: incompatible types for 
'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:1448:24: sparse: undefined identifier 
'NTB_TOPO_B2B_USD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1452:24: sparse: undefined identifier 
'NTB_TOPO_B2B_DSD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1614:31: sparse: undefined identifier 
'NTB_TOPO_SEC'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1789:14: sparse: undefined identifier 
'NTB_TOPO_B2B_USD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1790:14: sparse: undefined identifier 
'NTB_TOPO_B2B_DSD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1795:39: sparse: undefined identifier 
'NTB_TOPO_B2B_USD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1789:14: sparse: incompatible types for 
'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:1790:14: sparse: incompatible types for 
'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2053:24: sparse: undefined identifier 
'NTB_TOPO_B2B_USD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2056:24: sparse: undefined identifier 
'NTB_TOPO_B2B_DSD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2060:24: sparse: undefined identifier 
'NTB_TOPO_PRI'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2064:24: sparse: undefined identifier 
'NTB_TOPO_SEC'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2043:31: sparse: undefined identifier 
'NTB_TOPO_SEC'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2356:14: sparse: undefined identifier 
'NTB_TOPO_PRI'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2374:14: sparse: undefined identifier 
'NTB_TOPO_SEC'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2386:14: sparse: undefined identifier 
'NTB_TOPO_B2B_USD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2387:14: sparse: undefined identifier 
'NTB_TOPO_B2B_DSD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2416:39: sparse: undefined identifier 
'NTB_TOPO_B2B_USD'
   drivers/ntb/hw/intel/ntb_hw_intel.c:2356:14: sparse: incompatible types for 
'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2374:14: sparse: incompatible types for 
'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2386:14: sparse: incompatible types for 
'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2387:14: sparse: incompatible types for 
'case' statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2534:31: sparse: undefined identifier 
'NTB_TOPO_SEC'
   drivers/ntb/hw/intel/ntb_hw_intel.c:232:22: sparse: undefined identifier 
'ntb_topo_is_b2b'
   drivers/ntb/hw/intel/ntb_hw_intel.c:1572:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:1573:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:1789:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:1790:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2356:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2374:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2386:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c:2387:14: sparse: Expected constant 
expression in case statement
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'ndev_reset_unsafe_flags':
   drivers/ntb/hw/intel/ntb_hw_intel.c:232:8: error: implicit declaration of 
function 'ntb_topo_is_b2b' [-Werror=implicit-function-declaration]
  if (!ntb_topo_is_b2b(ndev->ntb.topo))
   ^~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'intel_ntb_link_enable':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1206:24: error: 'NTB_TOPO_SEC' 
undeclared 

Re: [PATCH 02/22] NTB: Add peer indexed ports NTB API

2016-11-30 Thread kbuild test robot
Hi Serge,

[auto build test ERROR on ntb/ntb-next]
[also build test ERROR on v4.9-rc7 next-20161130]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Serge-Semin/NTB-Alter-kernel-API-to-support-multi-port-devices/20161201-014939
base:   https://github.com/jonmason/ntb ntb-next
config: x86_64-randconfig-s5-12010242 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64 

Note: the 
linux-review/Serge-Semin/NTB-Alter-kernel-API-to-support-multi-port-devices/20161201-014939
 HEAD ced946cf007084caf9a2ec237c898bbf1940b440 builds fine.
  It only hurts bisectibility.

All error/warnings (new ones prefixed by >>):

   drivers/ntb/hw/amd/ntb_hw_amd.c: In function 'amd_ntb_link_enable':
>> drivers/ntb/hw/amd/ntb_hw_amd.c:256:24: error: 'NTB_TOPO_SEC' undeclared 
>> (first use in this function)
 if (ndev->ntb.topo == NTB_TOPO_SEC)
   ^~~~
   drivers/ntb/hw/amd/ntb_hw_amd.c:256:24: note: each undeclared identifier is 
reported only once for each function it appears in
   drivers/ntb/hw/amd/ntb_hw_amd.c: In function 'amd_ntb_link_disable':
   drivers/ntb/hw/amd/ntb_hw_amd.c:277:24: error: 'NTB_TOPO_SEC' undeclared 
(first use in this function)
 if (ndev->ntb.topo == NTB_TOPO_SEC)
   ^~~~
   drivers/ntb/hw/amd/ntb_hw_amd.c: In function 'amd_init_ntb':
>> drivers/ntb/hw/amd/ntb_hw_amd.c:880:7: error: 'NTB_TOPO_PRI' undeclared 
>> (first use in this function)
 case NTB_TOPO_PRI:
  ^~~~
   drivers/ntb/hw/amd/ntb_hw_amd.c:881:7: error: 'NTB_TOPO_SEC' undeclared 
(first use in this function)
 case NTB_TOPO_SEC:
  ^~~~
   drivers/ntb/hw/amd/ntb_hw_amd.c: In function 'amd_get_topo':
   drivers/ntb/hw/amd/ntb_hw_amd.c:915:10: error: 'NTB_TOPO_SEC' undeclared 
(first use in this function)
  return NTB_TOPO_SEC;
 ^~~~
   drivers/ntb/hw/amd/ntb_hw_amd.c:917:10: error: 'NTB_TOPO_PRI' undeclared 
(first use in this function)
  return NTB_TOPO_PRI;
 ^~~~
>> drivers/ntb/hw/amd/ntb_hw_amd.c:918:1: warning: control reaches end of 
>> non-void function [-Wreturn-type]
}
^
--
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'ndev_reset_unsafe_flags':
   drivers/ntb/hw/intel/ntb_hw_intel.c:232:8: error: implicit declaration of 
function 'ntb_topo_is_b2b' [-Werror=implicit-function-declaration]
  if (!ntb_topo_is_b2b(ndev->ntb.topo))
   ^~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'intel_ntb_link_enable':
>> drivers/ntb/hw/intel/ntb_hw_intel.c:1206:24: error: 'NTB_TOPO_SEC' 
>> undeclared (first use in this function)
 if (ndev->ntb.topo == NTB_TOPO_SEC)
   ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:1206:24: note: each undeclared 
identifier is reported only once for each function it appears in
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'intel_ntb_link_disable':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1235:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in this function)
 if (ndev->ntb.topo == NTB_TOPO_SEC)
   ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'atom_ppd_topo':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1448:10: error: 'NTB_TOPO_B2B_USD' 
undeclared (first use in this function)
  return NTB_TOPO_B2B_USD;
 ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:1452:10: error: 'NTB_TOPO_B2B_DSD' 
undeclared (first use in this function)
  return NTB_TOPO_B2B_DSD;
 ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'atom_init_ntb':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1572:7: error: 'NTB_TOPO_B2B_USD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_USD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:1573:7: error: 'NTB_TOPO_B2B_DSD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_DSD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'atom_init_dev':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1614:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in this function)
 if (ndev->ntb.topo != NTB_TOPO_SEC) {
   ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'skx_init_ntb':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1789:7: error: 'NTB_TOPO_B2B_USD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_USD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:1790:7: error: 'NTB_TOPO_B2B_DSD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_DSD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'xeon_link_is_up':
   drivers/ntb/hw/intel/ntb_hw_intel.c:2043:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in 

Re: [PATCH 02/22] NTB: Add peer indexed ports NTB API

2016-11-30 Thread kbuild test robot
Hi Serge,

[auto build test ERROR on ntb/ntb-next]
[also build test ERROR on v4.9-rc7 next-20161130]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Serge-Semin/NTB-Alter-kernel-API-to-support-multi-port-devices/20161201-014939
base:   https://github.com/jonmason/ntb ntb-next
config: x86_64-randconfig-s5-12010242 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64 

Note: the 
linux-review/Serge-Semin/NTB-Alter-kernel-API-to-support-multi-port-devices/20161201-014939
 HEAD ced946cf007084caf9a2ec237c898bbf1940b440 builds fine.
  It only hurts bisectibility.

All error/warnings (new ones prefixed by >>):

   drivers/ntb/hw/amd/ntb_hw_amd.c: In function 'amd_ntb_link_enable':
>> drivers/ntb/hw/amd/ntb_hw_amd.c:256:24: error: 'NTB_TOPO_SEC' undeclared 
>> (first use in this function)
 if (ndev->ntb.topo == NTB_TOPO_SEC)
   ^~~~
   drivers/ntb/hw/amd/ntb_hw_amd.c:256:24: note: each undeclared identifier is 
reported only once for each function it appears in
   drivers/ntb/hw/amd/ntb_hw_amd.c: In function 'amd_ntb_link_disable':
   drivers/ntb/hw/amd/ntb_hw_amd.c:277:24: error: 'NTB_TOPO_SEC' undeclared 
(first use in this function)
 if (ndev->ntb.topo == NTB_TOPO_SEC)
   ^~~~
   drivers/ntb/hw/amd/ntb_hw_amd.c: In function 'amd_init_ntb':
>> drivers/ntb/hw/amd/ntb_hw_amd.c:880:7: error: 'NTB_TOPO_PRI' undeclared 
>> (first use in this function)
 case NTB_TOPO_PRI:
  ^~~~
   drivers/ntb/hw/amd/ntb_hw_amd.c:881:7: error: 'NTB_TOPO_SEC' undeclared 
(first use in this function)
 case NTB_TOPO_SEC:
  ^~~~
   drivers/ntb/hw/amd/ntb_hw_amd.c: In function 'amd_get_topo':
   drivers/ntb/hw/amd/ntb_hw_amd.c:915:10: error: 'NTB_TOPO_SEC' undeclared 
(first use in this function)
  return NTB_TOPO_SEC;
 ^~~~
   drivers/ntb/hw/amd/ntb_hw_amd.c:917:10: error: 'NTB_TOPO_PRI' undeclared 
(first use in this function)
  return NTB_TOPO_PRI;
 ^~~~
>> drivers/ntb/hw/amd/ntb_hw_amd.c:918:1: warning: control reaches end of 
>> non-void function [-Wreturn-type]
}
^
--
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'ndev_reset_unsafe_flags':
   drivers/ntb/hw/intel/ntb_hw_intel.c:232:8: error: implicit declaration of 
function 'ntb_topo_is_b2b' [-Werror=implicit-function-declaration]
  if (!ntb_topo_is_b2b(ndev->ntb.topo))
   ^~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'intel_ntb_link_enable':
>> drivers/ntb/hw/intel/ntb_hw_intel.c:1206:24: error: 'NTB_TOPO_SEC' 
>> undeclared (first use in this function)
 if (ndev->ntb.topo == NTB_TOPO_SEC)
   ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:1206:24: note: each undeclared 
identifier is reported only once for each function it appears in
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'intel_ntb_link_disable':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1235:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in this function)
 if (ndev->ntb.topo == NTB_TOPO_SEC)
   ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'atom_ppd_topo':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1448:10: error: 'NTB_TOPO_B2B_USD' 
undeclared (first use in this function)
  return NTB_TOPO_B2B_USD;
 ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:1452:10: error: 'NTB_TOPO_B2B_DSD' 
undeclared (first use in this function)
  return NTB_TOPO_B2B_DSD;
 ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'atom_init_ntb':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1572:7: error: 'NTB_TOPO_B2B_USD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_USD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:1573:7: error: 'NTB_TOPO_B2B_DSD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_DSD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'atom_init_dev':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1614:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in this function)
 if (ndev->ntb.topo != NTB_TOPO_SEC) {
   ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'skx_init_ntb':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1789:7: error: 'NTB_TOPO_B2B_USD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_USD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:1790:7: error: 'NTB_TOPO_B2B_DSD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_DSD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'xeon_link_is_up':
   drivers/ntb/hw/intel/ntb_hw_intel.c:2043:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in 

Re: [PATCH 02/22] NTB: Add peer indexed ports NTB API

2016-11-30 Thread kbuild test robot
Hi Serge,

[auto build test ERROR on ntb/ntb-next]
[also build test ERROR on v4.9-rc7 next-20161130]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Serge-Semin/NTB-Alter-kernel-API-to-support-multi-port-devices/20161201-014939
base:   https://github.com/jonmason/ntb ntb-next
config: x86_64-allmodconfig (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64 

All errors (new ones prefixed by >>):

   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'ndev_reset_unsafe_flags':
>> drivers/ntb/hw/intel/ntb_hw_intel.c:232:8: error: implicit declaration of 
>> function 'ntb_topo_is_b2b' [-Werror=implicit-function-declaration]
  if (!ntb_topo_is_b2b(ndev->ntb.topo))
   ^~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'intel_ntb_link_enable':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1206:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in this function)
 if (ndev->ntb.topo == NTB_TOPO_SEC)
   ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:1206:24: note: each undeclared 
identifier is reported only once for each function it appears in
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'intel_ntb_link_disable':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1235:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in this function)
 if (ndev->ntb.topo == NTB_TOPO_SEC)
   ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'atom_ppd_topo':
>> drivers/ntb/hw/intel/ntb_hw_intel.c:1448:10: error: 'NTB_TOPO_B2B_USD' 
>> undeclared (first use in this function)
  return NTB_TOPO_B2B_USD;
 ^~~~
>> drivers/ntb/hw/intel/ntb_hw_intel.c:1452:10: error: 'NTB_TOPO_B2B_DSD' 
>> undeclared (first use in this function)
  return NTB_TOPO_B2B_DSD;
 ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'atom_init_ntb':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1572:7: error: 'NTB_TOPO_B2B_USD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_USD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:1573:7: error: 'NTB_TOPO_B2B_DSD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_DSD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'atom_init_dev':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1614:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in this function)
 if (ndev->ntb.topo != NTB_TOPO_SEC) {
   ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'skx_init_ntb':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1789:7: error: 'NTB_TOPO_B2B_USD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_USD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:1790:7: error: 'NTB_TOPO_B2B_DSD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_DSD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'xeon_link_is_up':
   drivers/ntb/hw/intel/ntb_hw_intel.c:2043:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in this function)
 if (ndev->ntb.topo == NTB_TOPO_SEC)
   ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'xeon_ppd_topo':
   drivers/ntb/hw/intel/ntb_hw_intel.c:2053:10: error: 'NTB_TOPO_B2B_USD' 
undeclared (first use in this function)
  return NTB_TOPO_B2B_USD;
 ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:2056:10: error: 'NTB_TOPO_B2B_DSD' 
undeclared (first use in this function)
  return NTB_TOPO_B2B_DSD;
 ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:2060:10: error: 'NTB_TOPO_PRI' 
undeclared (first use in this function)
  return NTB_TOPO_PRI;
 ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:2064:10: error: 'NTB_TOPO_SEC' 
undeclared (first use in this function)
  return NTB_TOPO_SEC;
 ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'xeon_init_ntb':
   drivers/ntb/hw/intel/ntb_hw_intel.c:2356:7: error: 'NTB_TOPO_PRI' undeclared 
(first use in this function)
 case NTB_TOPO_PRI:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:2374:7: error: 'NTB_TOPO_SEC' undeclared 
(first use in this function)
 case NTB_TOPO_SEC:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:2386:7: error: 'NTB_TOPO_B2B_USD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_USD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:2387:7: error: 'NTB_TOPO_B2B_DSD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_DSD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'xeon_init_dev':
   drivers/ntb/hw/intel/ntb_hw_intel.c:2534:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in this 

Re: [PATCH 02/22] NTB: Add peer indexed ports NTB API

2016-11-30 Thread kbuild test robot
Hi Serge,

[auto build test ERROR on ntb/ntb-next]
[also build test ERROR on v4.9-rc7 next-20161130]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Serge-Semin/NTB-Alter-kernel-API-to-support-multi-port-devices/20161201-014939
base:   https://github.com/jonmason/ntb ntb-next
config: x86_64-allmodconfig (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64 

All errors (new ones prefixed by >>):

   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'ndev_reset_unsafe_flags':
>> drivers/ntb/hw/intel/ntb_hw_intel.c:232:8: error: implicit declaration of 
>> function 'ntb_topo_is_b2b' [-Werror=implicit-function-declaration]
  if (!ntb_topo_is_b2b(ndev->ntb.topo))
   ^~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'intel_ntb_link_enable':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1206:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in this function)
 if (ndev->ntb.topo == NTB_TOPO_SEC)
   ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:1206:24: note: each undeclared 
identifier is reported only once for each function it appears in
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'intel_ntb_link_disable':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1235:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in this function)
 if (ndev->ntb.topo == NTB_TOPO_SEC)
   ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'atom_ppd_topo':
>> drivers/ntb/hw/intel/ntb_hw_intel.c:1448:10: error: 'NTB_TOPO_B2B_USD' 
>> undeclared (first use in this function)
  return NTB_TOPO_B2B_USD;
 ^~~~
>> drivers/ntb/hw/intel/ntb_hw_intel.c:1452:10: error: 'NTB_TOPO_B2B_DSD' 
>> undeclared (first use in this function)
  return NTB_TOPO_B2B_DSD;
 ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'atom_init_ntb':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1572:7: error: 'NTB_TOPO_B2B_USD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_USD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:1573:7: error: 'NTB_TOPO_B2B_DSD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_DSD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'atom_init_dev':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1614:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in this function)
 if (ndev->ntb.topo != NTB_TOPO_SEC) {
   ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'skx_init_ntb':
   drivers/ntb/hw/intel/ntb_hw_intel.c:1789:7: error: 'NTB_TOPO_B2B_USD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_USD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:1790:7: error: 'NTB_TOPO_B2B_DSD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_DSD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'xeon_link_is_up':
   drivers/ntb/hw/intel/ntb_hw_intel.c:2043:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in this function)
 if (ndev->ntb.topo == NTB_TOPO_SEC)
   ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'xeon_ppd_topo':
   drivers/ntb/hw/intel/ntb_hw_intel.c:2053:10: error: 'NTB_TOPO_B2B_USD' 
undeclared (first use in this function)
  return NTB_TOPO_B2B_USD;
 ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:2056:10: error: 'NTB_TOPO_B2B_DSD' 
undeclared (first use in this function)
  return NTB_TOPO_B2B_DSD;
 ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:2060:10: error: 'NTB_TOPO_PRI' 
undeclared (first use in this function)
  return NTB_TOPO_PRI;
 ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:2064:10: error: 'NTB_TOPO_SEC' 
undeclared (first use in this function)
  return NTB_TOPO_SEC;
 ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'xeon_init_ntb':
   drivers/ntb/hw/intel/ntb_hw_intel.c:2356:7: error: 'NTB_TOPO_PRI' undeclared 
(first use in this function)
 case NTB_TOPO_PRI:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:2374:7: error: 'NTB_TOPO_SEC' undeclared 
(first use in this function)
 case NTB_TOPO_SEC:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:2386:7: error: 'NTB_TOPO_B2B_USD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_USD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c:2387:7: error: 'NTB_TOPO_B2B_DSD' 
undeclared (first use in this function)
 case NTB_TOPO_B2B_DSD:
  ^~~~
   drivers/ntb/hw/intel/ntb_hw_intel.c: In function 'xeon_init_dev':
   drivers/ntb/hw/intel/ntb_hw_intel.c:2534:24: error: 'NTB_TOPO_SEC' 
undeclared (first use in this 

[PATCH 02/22] NTB: Add peer indexed ports NTB API

2016-11-29 Thread Serge Semin
Add new port-index NTB API. Additionally lets get rid of Primary and
Secondary topologies, since port-number can be effectively used instead.

Signed-off-by: Serge Semin 

---
 include/linux/ntb.h | 101 
 1 file changed, 79 insertions(+), 22 deletions(-)

diff --git a/include/linux/ntb.h b/include/linux/ntb.h
index 5d1f260..0941a43 100644
--- a/include/linux/ntb.h
+++ b/include/linux/ntb.h
@@ -64,37 +64,21 @@ struct pci_dev;
 /**
  * enum ntb_topo - NTB connection topology
  * @NTB_TOPO_NONE: Topology is unknown or invalid.
- * @NTB_TOPO_PRI:  On primary side of local ntb.
- * @NTB_TOPO_SEC:  On secondary side of remote ntb.
- * @NTB_TOPO_B2B_USD:  On primary side of local ntb upstream of remote ntb.
- * @NTB_TOPO_B2B_DSD:  On primary side of local ntb downstream of remote ntb.
+ * @NTB_TOPO_P2P:  Simple port-to-port NTB topology
+ * @NTB_TOPO_B2B:  Bridge-to-bridge NTB topology
  */
 enum ntb_topo {
NTB_TOPO_NONE = -1,
-   NTB_TOPO_PRI,
-   NTB_TOPO_SEC,
-   NTB_TOPO_B2B_USD,
-   NTB_TOPO_B2B_DSD,
+   NTB_TOPO_P2P,
+   NTB_TOPO_B2B
 };
 
-static inline int ntb_topo_is_b2b(enum ntb_topo topo)
-{
-   switch ((int)topo) {
-   case NTB_TOPO_B2B_USD:
-   case NTB_TOPO_B2B_DSD:
-   return 1;
-   }
-   return 0;
-}
-
 static inline char *ntb_topo_string(enum ntb_topo topo)
 {
switch (topo) {
case NTB_TOPO_NONE: return "NTB_TOPO_NONE";
-   case NTB_TOPO_PRI:  return "NTB_TOPO_PRI";
-   case NTB_TOPO_SEC:  return "NTB_TOPO_SEC";
-   case NTB_TOPO_B2B_USD:  return "NTB_TOPO_B2B_USD";
-   case NTB_TOPO_B2B_DSD:  return "NTB_TOPO_B2B_DSD";
+   case NTB_TOPO_P2P:  return "NTB_TOPO_P2P";
+   case NTB_TOPO_B2B:  return "NTB_TOPO_B2B";
}
return "NTB_TOPO_INVALID";
 }
@@ -179,6 +163,10 @@ static inline int ntb_ctx_ops_is_valid(const struct 
ntb_ctx_ops *ops)
 
 /**
  * struct ntb_ctx_ops - ntb device operations
+ * @port_number:   See ntb_port_number().
+ * @peer_port_count:   See ntb_peer_port_count().
+ * @peer_port_number:  See ntb_peer_port_number().
+ * @peer_port_idx: See ntb_peer_port_idx().
  * @link_is_up:See ntb_link_is_up().
  * @link_enable:   See ntb_link_enable().
  * @link_disable:  See ntb_link_disable().
@@ -212,6 +200,11 @@ static inline int ntb_ctx_ops_is_valid(const struct 
ntb_ctx_ops *ops)
  * @peer_spad_write:   See ntb_peer_spad_write().
  */
 struct ntb_dev_ops {
+   int (*port_number)(struct ntb_dev *ntb);
+   int (*peer_port_count)(struct ntb_dev *ntb);
+   int (*peer_port_number)(struct ntb_dev *ntb, int pidx);
+   int (*peer_port_idx)(struct ntb_dev *ntb, int port);
+
int (*link_is_up)(struct ntb_dev *ntb,
  enum ntb_speed *speed, enum ntb_width *width);
int (*link_enable)(struct ntb_dev *ntb,
@@ -265,6 +258,10 @@ static inline int ntb_dev_ops_is_valid(const struct 
ntb_dev_ops *ops)
 {
/* commented callbacks are not required: */
return
+   ops->port_number&&
+   ops->peer_port_count&&
+   ops->peer_port_number   &&
+   ops->peer_port_idx  &&
ops->link_is_up &&
ops->link_enable&&
ops->link_disable   &&
@@ -319,6 +316,7 @@ struct ntb_client {
  * @dev:   Linux device object.
  * @pdev:  Pci device entry of the ntb.
  * @topo:  Detected topology of the ntb.
+ * @port:  Local port of the ntb.
  * @ops:   See _dev_ops.
  * @ctx:   See _ctx_ops.
  * @ctx_ops:   See _ctx_ops.
@@ -327,6 +325,7 @@ struct ntb_dev {
struct device   dev;
struct pci_dev  *pdev;
enum ntb_topo   topo;
+   int port;
const struct ntb_dev_ops*ops;
void*ctx;
const struct ntb_ctx_ops*ctx_ops;
@@ -442,6 +441,64 @@ void ntb_link_event(struct ntb_dev *ntb);
 void ntb_db_event(struct ntb_dev *ntb, int vector);
 
 /**
+ * ntb_port_number() - get the local port number
+ * @ntb:   NTB device context.
+ *
+ * Hardware must support at least simple two-ports topology
+ *
+ * Return: the local port number
+ */
+static inline int ntb_port_number(struct ntb_dev *ntb)
+{
+   return ntb->ops->port_number(ntb);
+}
+
+/**
+ * ntb_peer_port_count() - get the number of peer device ports
+ * @ntb:   NTB device context.
+ *
+ * Hardware may support an access to memory of several remote domains
+ * over multi-port NTB devices. This method returns the number of peers,
+ * local device can have shared memory with.
+ *

[PATCH 02/22] NTB: Add peer indexed ports NTB API

2016-11-29 Thread Serge Semin
Add new port-index NTB API. Additionally lets get rid of Primary and
Secondary topologies, since port-number can be effectively used instead.

Signed-off-by: Serge Semin 

---
 include/linux/ntb.h | 101 
 1 file changed, 79 insertions(+), 22 deletions(-)

diff --git a/include/linux/ntb.h b/include/linux/ntb.h
index 5d1f260..0941a43 100644
--- a/include/linux/ntb.h
+++ b/include/linux/ntb.h
@@ -64,37 +64,21 @@ struct pci_dev;
 /**
  * enum ntb_topo - NTB connection topology
  * @NTB_TOPO_NONE: Topology is unknown or invalid.
- * @NTB_TOPO_PRI:  On primary side of local ntb.
- * @NTB_TOPO_SEC:  On secondary side of remote ntb.
- * @NTB_TOPO_B2B_USD:  On primary side of local ntb upstream of remote ntb.
- * @NTB_TOPO_B2B_DSD:  On primary side of local ntb downstream of remote ntb.
+ * @NTB_TOPO_P2P:  Simple port-to-port NTB topology
+ * @NTB_TOPO_B2B:  Bridge-to-bridge NTB topology
  */
 enum ntb_topo {
NTB_TOPO_NONE = -1,
-   NTB_TOPO_PRI,
-   NTB_TOPO_SEC,
-   NTB_TOPO_B2B_USD,
-   NTB_TOPO_B2B_DSD,
+   NTB_TOPO_P2P,
+   NTB_TOPO_B2B
 };
 
-static inline int ntb_topo_is_b2b(enum ntb_topo topo)
-{
-   switch ((int)topo) {
-   case NTB_TOPO_B2B_USD:
-   case NTB_TOPO_B2B_DSD:
-   return 1;
-   }
-   return 0;
-}
-
 static inline char *ntb_topo_string(enum ntb_topo topo)
 {
switch (topo) {
case NTB_TOPO_NONE: return "NTB_TOPO_NONE";
-   case NTB_TOPO_PRI:  return "NTB_TOPO_PRI";
-   case NTB_TOPO_SEC:  return "NTB_TOPO_SEC";
-   case NTB_TOPO_B2B_USD:  return "NTB_TOPO_B2B_USD";
-   case NTB_TOPO_B2B_DSD:  return "NTB_TOPO_B2B_DSD";
+   case NTB_TOPO_P2P:  return "NTB_TOPO_P2P";
+   case NTB_TOPO_B2B:  return "NTB_TOPO_B2B";
}
return "NTB_TOPO_INVALID";
 }
@@ -179,6 +163,10 @@ static inline int ntb_ctx_ops_is_valid(const struct 
ntb_ctx_ops *ops)
 
 /**
  * struct ntb_ctx_ops - ntb device operations
+ * @port_number:   See ntb_port_number().
+ * @peer_port_count:   See ntb_peer_port_count().
+ * @peer_port_number:  See ntb_peer_port_number().
+ * @peer_port_idx: See ntb_peer_port_idx().
  * @link_is_up:See ntb_link_is_up().
  * @link_enable:   See ntb_link_enable().
  * @link_disable:  See ntb_link_disable().
@@ -212,6 +200,11 @@ static inline int ntb_ctx_ops_is_valid(const struct 
ntb_ctx_ops *ops)
  * @peer_spad_write:   See ntb_peer_spad_write().
  */
 struct ntb_dev_ops {
+   int (*port_number)(struct ntb_dev *ntb);
+   int (*peer_port_count)(struct ntb_dev *ntb);
+   int (*peer_port_number)(struct ntb_dev *ntb, int pidx);
+   int (*peer_port_idx)(struct ntb_dev *ntb, int port);
+
int (*link_is_up)(struct ntb_dev *ntb,
  enum ntb_speed *speed, enum ntb_width *width);
int (*link_enable)(struct ntb_dev *ntb,
@@ -265,6 +258,10 @@ static inline int ntb_dev_ops_is_valid(const struct 
ntb_dev_ops *ops)
 {
/* commented callbacks are not required: */
return
+   ops->port_number&&
+   ops->peer_port_count&&
+   ops->peer_port_number   &&
+   ops->peer_port_idx  &&
ops->link_is_up &&
ops->link_enable&&
ops->link_disable   &&
@@ -319,6 +316,7 @@ struct ntb_client {
  * @dev:   Linux device object.
  * @pdev:  Pci device entry of the ntb.
  * @topo:  Detected topology of the ntb.
+ * @port:  Local port of the ntb.
  * @ops:   See _dev_ops.
  * @ctx:   See _ctx_ops.
  * @ctx_ops:   See _ctx_ops.
@@ -327,6 +325,7 @@ struct ntb_dev {
struct device   dev;
struct pci_dev  *pdev;
enum ntb_topo   topo;
+   int port;
const struct ntb_dev_ops*ops;
void*ctx;
const struct ntb_ctx_ops*ctx_ops;
@@ -442,6 +441,64 @@ void ntb_link_event(struct ntb_dev *ntb);
 void ntb_db_event(struct ntb_dev *ntb, int vector);
 
 /**
+ * ntb_port_number() - get the local port number
+ * @ntb:   NTB device context.
+ *
+ * Hardware must support at least simple two-ports topology
+ *
+ * Return: the local port number
+ */
+static inline int ntb_port_number(struct ntb_dev *ntb)
+{
+   return ntb->ops->port_number(ntb);
+}
+
+/**
+ * ntb_peer_port_count() - get the number of peer device ports
+ * @ntb:   NTB device context.
+ *
+ * Hardware may support an access to memory of several remote domains
+ * over multi-port NTB devices. This method returns the number of peers,
+ * local device can have shared memory with.
+ *
+ * Return: the number of