Linux PCI Non-Transparent Bridge framework and drivers
 help / color / mirror / Atom feed
From: "Allen Hubbe" <Allen.Hubbe@dell.com>
To: 'Dave Jiang' <dave.jiang@intel.com>, jdmason@kudzu.us
Cc: linux-ntb@googlegroups.com
Subject: RE: [PATCH] ntb: remove Intel Atom NTB driver support
Date: Mon, 13 Nov 2017 09:06:16 -0500	[thread overview]
Message-ID: <000101d35c88$9430f360$bc92da20$@dell.com> (raw)
In-Reply-To: <151035618716.31660.7327782780368336511.stgit@djiang5-desk3.ch.intel.com>

From: Dave Jiang
> Removing dead code since this is not being used.
> 
> Signed-off-by: Dave Jiang <dave.jiang@intel.com>

Acked-by: Allen Hubbe <Allen.Hubbe@dell.com>

> ---
>  drivers/ntb/hw/intel/ntb_hw_intel.c |  309 -----------------------------------
>  drivers/ntb/hw/intel/ntb_hw_intel.h |   58 -------
>  2 files changed, 4 insertions(+), 363 deletions(-)
> 
> diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.c b/drivers/ntb/hw/intel/ntb_hw_intel.c
> index c1d2f85..94c0737 100644
> --- a/drivers/ntb/hw/intel/ntb_hw_intel.c
> +++ b/drivers/ntb/hw/intel/ntb_hw_intel.c
> @@ -74,12 +74,6 @@ MODULE_AUTHOR("Intel Corporation");
>  #define bar0_off(base, bar) ((base) + ((bar) << 2))
>  #define bar2_off(base, bar) bar0_off(base, (bar) - 2)
> 
> -static const struct intel_ntb_reg atom_reg;
> -static const struct intel_ntb_alt_reg atom_pri_reg;
> -static const struct intel_ntb_alt_reg atom_sec_reg;
> -static const struct intel_ntb_alt_reg atom_b2b_reg;
> -static const struct intel_ntb_xlat_reg atom_pri_xlat;
> -static const struct intel_ntb_xlat_reg atom_sec_xlat;
>  static const struct intel_ntb_reg xeon_reg;
>  static const struct intel_ntb_alt_reg xeon_pri_reg;
>  static const struct intel_ntb_alt_reg xeon_sec_reg;
> @@ -184,15 +178,6 @@ static inline void _iowrite64(u64 val, void __iomem *mmio)
>  #endif
>  #endif
> 
> -static inline int pdev_is_atom(struct pci_dev *pdev)
> -{
> -	switch (pdev->device) {
> -	case PCI_DEVICE_ID_INTEL_NTB_B2B_BWD:
> -		return 1;
> -	}
> -	return 0;
> -}
> -
>  static inline int pdev_is_xeon(struct pci_dev *pdev)
>  {
>  	switch (pdev->device) {
> @@ -1015,8 +1000,7 @@ static ssize_t ndev_debugfs_read(struct file *filp, char __user *ubuf,
>  {
>  	struct intel_ntb_dev *ndev = filp->private_data;
> 
> -	if (pdev_is_xeon(ndev->ntb.pdev) ||
> -	    pdev_is_atom(ndev->ntb.pdev))
> +	if (pdev_is_xeon(ndev->ntb.pdev))
>  		return ndev_ntb_debugfs_read(filp, ubuf, count, offp);
>  	else if (pdev_is_xeon_ntb3(ndev->ntb.pdev))
>  		return ndev_ntb3_debugfs_read(filp, ubuf, count, offp);
> @@ -1448,242 +1432,6 @@ static int intel_ntb_peer_spad_write(struct ntb_dev *ntb, int pidx,
>  			       ndev->peer_reg->spad);
>  }
> 
> -/* ATOM */
> -
> -static u64 atom_db_ioread(void __iomem *mmio)
> -{
> -	return ioread64(mmio);
> -}
> -
> -static void atom_db_iowrite(u64 bits, void __iomem *mmio)
> -{
> -	iowrite64(bits, mmio);
> -}
> -
> -static int atom_poll_link(struct intel_ntb_dev *ndev)
> -{
> -	u32 ntb_ctl;
> -
> -	ntb_ctl = ioread32(ndev->self_mmio + ATOM_NTBCNTL_OFFSET);
> -
> -	if (ntb_ctl == ndev->ntb_ctl)
> -		return 0;
> -
> -	ndev->ntb_ctl = ntb_ctl;
> -
> -	ndev->lnk_sta = ioread32(ndev->self_mmio + ATOM_LINK_STATUS_OFFSET);
> -
> -	return 1;
> -}
> -
> -static int atom_link_is_up(struct intel_ntb_dev *ndev)
> -{
> -	return ATOM_NTB_CTL_ACTIVE(ndev->ntb_ctl);
> -}
> -
> -static int atom_link_is_err(struct intel_ntb_dev *ndev)
> -{
> -	if (ioread32(ndev->self_mmio + ATOM_LTSSMSTATEJMP_OFFSET)
> -	    & ATOM_LTSSMSTATEJMP_FORCEDETECT)
> -		return 1;
> -
> -	if (ioread32(ndev->self_mmio + ATOM_IBSTERRRCRVSTS0_OFFSET)
> -	    & ATOM_IBIST_ERR_OFLOW)
> -		return 1;
> -
> -	return 0;
> -}
> -
> -static inline enum ntb_topo atom_ppd_topo(struct intel_ntb_dev *ndev, u32 ppd)
> -{
> -	struct device *dev = &ndev->ntb.pdev->dev;
> -
> -	switch (ppd & ATOM_PPD_TOPO_MASK) {
> -	case ATOM_PPD_TOPO_B2B_USD:
> -		dev_dbg(dev, "PPD %d B2B USD\n", ppd);
> -		return NTB_TOPO_B2B_USD;
> -
> -	case ATOM_PPD_TOPO_B2B_DSD:
> -		dev_dbg(dev, "PPD %d B2B DSD\n", ppd);
> -		return NTB_TOPO_B2B_DSD;
> -
> -	case ATOM_PPD_TOPO_PRI_USD:
> -	case ATOM_PPD_TOPO_PRI_DSD: /* accept bogus PRI_DSD */
> -	case ATOM_PPD_TOPO_SEC_USD:
> -	case ATOM_PPD_TOPO_SEC_DSD: /* accept bogus SEC_DSD */
> -		dev_dbg(dev, "PPD %d non B2B disabled\n", ppd);
> -		return NTB_TOPO_NONE;
> -	}
> -
> -	dev_dbg(dev, "PPD %d invalid\n", ppd);
> -	return NTB_TOPO_NONE;
> -}
> -
> -static void atom_link_hb(struct work_struct *work)
> -{
> -	struct intel_ntb_dev *ndev = hb_ndev(work);
> -	struct device *dev = &ndev->ntb.pdev->dev;
> -	unsigned long poll_ts;
> -	void __iomem *mmio;
> -	u32 status32;
> -
> -	poll_ts = ndev->last_ts + ATOM_LINK_HB_TIMEOUT;
> -
> -	/* Delay polling the link status if an interrupt was received,
> -	 * unless the cached link status says the link is down.
> -	 */
> -	if (time_after(poll_ts, jiffies) && atom_link_is_up(ndev)) {
> -		schedule_delayed_work(&ndev->hb_timer, poll_ts - jiffies);
> -		return;
> -	}
> -
> -	if (atom_poll_link(ndev))
> -		ntb_link_event(&ndev->ntb);
> -
> -	if (atom_link_is_up(ndev) || !atom_link_is_err(ndev)) {
> -		schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_HB_TIMEOUT);
> -		return;
> -	}
> -
> -	/* Link is down with error: recover the link! */
> -
> -	mmio = ndev->self_mmio;
> -
> -	/* Driver resets the NTB ModPhy lanes - magic! */
> -	iowrite8(0xe0, mmio + ATOM_MODPHY_PCSREG6);
> -	iowrite8(0x40, mmio + ATOM_MODPHY_PCSREG4);
> -	iowrite8(0x60, mmio + ATOM_MODPHY_PCSREG4);
> -	iowrite8(0x60, mmio + ATOM_MODPHY_PCSREG6);
> -
> -	/* Driver waits 100ms to allow the NTB ModPhy to settle */
> -	msleep(100);
> -
> -	/* Clear AER Errors, write to clear */
> -	status32 = ioread32(mmio + ATOM_ERRCORSTS_OFFSET);
> -	dev_dbg(dev, "ERRCORSTS = %x\n", status32);
> -	status32 &= PCI_ERR_COR_REP_ROLL;
> -	iowrite32(status32, mmio + ATOM_ERRCORSTS_OFFSET);
> -
> -	/* Clear unexpected electrical idle event in LTSSM, write to clear */
> -	status32 = ioread32(mmio + ATOM_LTSSMERRSTS0_OFFSET);
> -	dev_dbg(dev, "LTSSMERRSTS0 = %x\n", status32);
> -	status32 |= ATOM_LTSSMERRSTS0_UNEXPECTEDEI;
> -	iowrite32(status32, mmio + ATOM_LTSSMERRSTS0_OFFSET);
> -
> -	/* Clear DeSkew Buffer error, write to clear */
> -	status32 = ioread32(mmio + ATOM_DESKEWSTS_OFFSET);
> -	dev_dbg(dev, "DESKEWSTS = %x\n", status32);
> -	status32 |= ATOM_DESKEWSTS_DBERR;
> -	iowrite32(status32, mmio + ATOM_DESKEWSTS_OFFSET);
> -
> -	status32 = ioread32(mmio + ATOM_IBSTERRRCRVSTS0_OFFSET);
> -	dev_dbg(dev, "IBSTERRRCRVSTS0 = %x\n", status32);
> -	status32 &= ATOM_IBIST_ERR_OFLOW;
> -	iowrite32(status32, mmio + ATOM_IBSTERRRCRVSTS0_OFFSET);
> -
> -	/* Releases the NTB state machine to allow the link to retrain */
> -	status32 = ioread32(mmio + ATOM_LTSSMSTATEJMP_OFFSET);
> -	dev_dbg(dev, "LTSSMSTATEJMP = %x\n", status32);
> -	status32 &= ~ATOM_LTSSMSTATEJMP_FORCEDETECT;
> -	iowrite32(status32, mmio + ATOM_LTSSMSTATEJMP_OFFSET);
> -
> -	/* There is a potential race between the 2 NTB devices recovering at the
> -	 * same time.  If the times are the same, the link will not recover and
> -	 * the driver will be stuck in this loop forever.  Add a random interval
> -	 * to the recovery time to prevent this race.
> -	 */
> -	schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_RECOVERY_TIME
> -			      + prandom_u32() % ATOM_LINK_RECOVERY_TIME);
> -}
> -
> -static int atom_init_isr(struct intel_ntb_dev *ndev)
> -{
> -	int rc;
> -
> -	rc = ndev_init_isr(ndev, 1, ATOM_DB_MSIX_VECTOR_COUNT,
> -			   ATOM_DB_MSIX_VECTOR_SHIFT, ATOM_DB_TOTAL_SHIFT);
> -	if (rc)
> -		return rc;
> -
> -	/* ATOM doesn't have link status interrupt, poll on that platform */
> -	ndev->last_ts = jiffies;
> -	INIT_DELAYED_WORK(&ndev->hb_timer, atom_link_hb);
> -	schedule_delayed_work(&ndev->hb_timer, ATOM_LINK_HB_TIMEOUT);
> -
> -	return 0;
> -}
> -
> -static void atom_deinit_isr(struct intel_ntb_dev *ndev)
> -{
> -	cancel_delayed_work_sync(&ndev->hb_timer);
> -	ndev_deinit_isr(ndev);
> -}
> -
> -static int atom_init_ntb(struct intel_ntb_dev *ndev)
> -{
> -	ndev->mw_count = ATOM_MW_COUNT;
> -	ndev->spad_count = ATOM_SPAD_COUNT;
> -	ndev->db_count = ATOM_DB_COUNT;
> -
> -	switch (ndev->ntb.topo) {
> -	case NTB_TOPO_B2B_USD:
> -	case NTB_TOPO_B2B_DSD:
> -		ndev->self_reg = &atom_pri_reg;
> -		ndev->peer_reg = &atom_b2b_reg;
> -		ndev->xlat_reg = &atom_sec_xlat;
> -
> -		/* Enable Bus Master and Memory Space on the secondary side */
> -		iowrite16(PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER,
> -			  ndev->self_mmio + ATOM_SPCICMD_OFFSET);
> -
> -		break;
> -
> -	default:
> -		return -EINVAL;
> -	}
> -
> -	ndev->db_valid_mask = BIT_ULL(ndev->db_count) - 1;
> -
> -	return 0;
> -}
> -
> -static int atom_init_dev(struct intel_ntb_dev *ndev)
> -{
> -	u32 ppd;
> -	int rc;
> -
> -	rc = pci_read_config_dword(ndev->ntb.pdev, ATOM_PPD_OFFSET, &ppd);
> -	if (rc)
> -		return -EIO;
> -
> -	ndev->ntb.topo = atom_ppd_topo(ndev, ppd);
> -	if (ndev->ntb.topo == NTB_TOPO_NONE)
> -		return -EINVAL;
> -
> -	rc = atom_init_ntb(ndev);
> -	if (rc)
> -		return rc;
> -
> -	rc = atom_init_isr(ndev);
> -	if (rc)
> -		return rc;
> -
> -	if (ndev->ntb.topo != NTB_TOPO_SEC) {
> -		/* Initiate PCI-E link training */
> -		rc = pci_write_config_dword(ndev->ntb.pdev, ATOM_PPD_OFFSET,
> -					    ppd | ATOM_PPD_INIT_LINK);
> -		if (rc)
> -			return rc;
> -	}
> -
> -	return 0;
> -}
> -
> -static void atom_deinit_dev(struct intel_ntb_dev *ndev)
> -{
> -	atom_deinit_isr(ndev);
> -}
> -
>  /* Skylake Xeon NTB */
> 
>  static int skx_poll_link(struct intel_ntb_dev *ndev)
> @@ -2738,24 +2486,7 @@ static int intel_ntb_pci_probe(struct pci_dev *pdev,
> 
>  	node = dev_to_node(&pdev->dev);
> 
> -	if (pdev_is_atom(pdev)) {
> -		ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
> -		if (!ndev) {
> -			rc = -ENOMEM;
> -			goto err_ndev;
> -		}
> -
> -		ndev_init_struct(ndev, pdev);
> -
> -		rc = intel_ntb_init_pci(ndev, pdev);
> -		if (rc)
> -			goto err_init_pci;
> -
> -		rc = atom_init_dev(ndev);
> -		if (rc)
> -			goto err_init_dev;
> -
> -	} else if (pdev_is_xeon(pdev)) {
> +	if (pdev_is_xeon(pdev)) {
>  		ndev = kzalloc_node(sizeof(*ndev), GFP_KERNEL, node);
>  		if (!ndev) {
>  			rc = -ENOMEM;
> @@ -2811,9 +2542,7 @@ static int intel_ntb_pci_probe(struct pci_dev *pdev,
> 
>  err_register:
>  	ndev_deinit_debugfs(ndev);
> -	if (pdev_is_atom(pdev))
> -		atom_deinit_dev(ndev);
> -	else if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
> +	if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
>  		xeon_deinit_dev(ndev);
>  err_init_dev:
>  	intel_ntb_deinit_pci(ndev);
> @@ -2829,41 +2558,12 @@ static void intel_ntb_pci_remove(struct pci_dev *pdev)
> 
>  	ntb_unregister_device(&ndev->ntb);
>  	ndev_deinit_debugfs(ndev);
> -	if (pdev_is_atom(pdev))
> -		atom_deinit_dev(ndev);
> -	else if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
> +	if (pdev_is_xeon(pdev) || pdev_is_xeon_ntb3(pdev))
>  		xeon_deinit_dev(ndev);
>  	intel_ntb_deinit_pci(ndev);
>  	kfree(ndev);
>  }
> 
> -static const struct intel_ntb_reg atom_reg = {
> -	.poll_link		= atom_poll_link,
> -	.link_is_up		= atom_link_is_up,
> -	.db_ioread		= atom_db_ioread,
> -	.db_iowrite		= atom_db_iowrite,
> -	.db_size		= sizeof(u64),
> -	.ntb_ctl		= ATOM_NTBCNTL_OFFSET,
> -	.mw_bar			= {2, 4},
> -};
> -
> -static const struct intel_ntb_alt_reg atom_pri_reg = {
> -	.db_bell		= ATOM_PDOORBELL_OFFSET,
> -	.db_mask		= ATOM_PDBMSK_OFFSET,
> -	.spad			= ATOM_SPAD_OFFSET,
> -};
> -
> -static const struct intel_ntb_alt_reg atom_b2b_reg = {
> -	.db_bell		= ATOM_B2B_DOORBELL_OFFSET,
> -	.spad			= ATOM_B2B_SPAD_OFFSET,
> -};
> -
> -static const struct intel_ntb_xlat_reg atom_sec_xlat = {
> -	/* FIXME : .bar0_base	= ATOM_SBAR0BASE_OFFSET, */
> -	/* FIXME : .bar2_limit	= ATOM_SBAR2LMT_OFFSET, */
> -	.bar2_xlat		= ATOM_SBAR2XLAT_OFFSET,
> -};
> -
>  static const struct intel_ntb_reg xeon_reg = {
>  	.poll_link		= xeon_poll_link,
>  	.link_is_up		= xeon_link_is_up,
> @@ -3020,7 +2720,6 @@ static const struct file_operations intel_ntb_debugfs_info = {
>  };
> 
>  static const struct pci_device_id intel_ntb_pci_tbl[] = {
> -	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_BWD)},
>  	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_JSF)},
>  	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_SNB)},
>  	{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_NTB_B2B_IVT)},
> diff --git a/drivers/ntb/hw/intel/ntb_hw_intel.h b/drivers/ntb/hw/intel/ntb_hw_intel.h
> index a8b17f3..9d2c6b6 100644
> --- a/drivers/ntb/hw/intel/ntb_hw_intel.h
> +++ b/drivers/ntb/hw/intel/ntb_hw_intel.h
> @@ -66,7 +66,6 @@
>  #define PCI_DEVICE_ID_INTEL_NTB_B2B_HSX	0x2F0D
>  #define PCI_DEVICE_ID_INTEL_NTB_PS_HSX	0x2F0E
>  #define PCI_DEVICE_ID_INTEL_NTB_SS_HSX	0x2F0F
> -#define PCI_DEVICE_ID_INTEL_NTB_B2B_BWD	0x0C4E
>  #define PCI_DEVICE_ID_INTEL_NTB_B2B_BDX	0x6F0D
>  #define PCI_DEVICE_ID_INTEL_NTB_PS_BDX	0x6F0E
>  #define PCI_DEVICE_ID_INTEL_NTB_SS_BDX	0x6F0F
> @@ -197,63 +196,6 @@
>  #define SKX_DB_TOTAL_SHIFT		33
>  #define SKX_SPAD_COUNT			16
> 
> -/* Intel Atom hardware */
> -
> -#define ATOM_SBAR2XLAT_OFFSET		0x0008
> -#define ATOM_PDOORBELL_OFFSET		0x0020
> -#define ATOM_PDBMSK_OFFSET		0x0028
> -#define ATOM_NTBCNTL_OFFSET		0x0060
> -#define ATOM_SPAD_OFFSET			0x0080
> -#define ATOM_PPD_OFFSET			0x00d4
> -#define ATOM_PBAR2XLAT_OFFSET		0x8008
> -#define ATOM_B2B_DOORBELL_OFFSET		0x8020
> -#define ATOM_B2B_SPAD_OFFSET		0x8080
> -#define ATOM_SPCICMD_OFFSET		0xb004
> -#define ATOM_LINK_STATUS_OFFSET		0xb052
> -#define ATOM_ERRCORSTS_OFFSET		0xb110
> -#define ATOM_IP_BASE			0xc000
> -#define ATOM_DESKEWSTS_OFFSET		(ATOM_IP_BASE + 0x3024)
> -#define ATOM_LTSSMERRSTS0_OFFSET		(ATOM_IP_BASE + 0x3180)
> -#define ATOM_LTSSMSTATEJMP_OFFSET	(ATOM_IP_BASE + 0x3040)
> -#define ATOM_IBSTERRRCRVSTS0_OFFSET	(ATOM_IP_BASE + 0x3324)
> -#define ATOM_MODPHY_PCSREG4		0x1c004
> -#define ATOM_MODPHY_PCSREG6		0x1c006
> -
> -#define ATOM_PPD_INIT_LINK		0x0008
> -#define ATOM_PPD_CONN_MASK		0x0300
> -#define ATOM_PPD_CONN_TRANSPARENT	0x0000
> -#define ATOM_PPD_CONN_B2B		0x0100
> -#define ATOM_PPD_CONN_RP			0x0200
> -#define ATOM_PPD_DEV_MASK		0x1000
> -#define ATOM_PPD_DEV_USD			0x0000
> -#define ATOM_PPD_DEV_DSD			0x1000
> -#define ATOM_PPD_TOPO_MASK	(ATOM_PPD_CONN_MASK | ATOM_PPD_DEV_MASK)
> -#define ATOM_PPD_TOPO_PRI_USD	(ATOM_PPD_CONN_TRANSPARENT | ATOM_PPD_DEV_USD)
> -#define ATOM_PPD_TOPO_PRI_DSD	(ATOM_PPD_CONN_TRANSPARENT | ATOM_PPD_DEV_DSD)
> -#define ATOM_PPD_TOPO_SEC_USD	(ATOM_PPD_CONN_RP | ATOM_PPD_DEV_USD)
> -#define ATOM_PPD_TOPO_SEC_DSD	(ATOM_PPD_CONN_RP | ATOM_PPD_DEV_DSD)
> -#define ATOM_PPD_TOPO_B2B_USD	(ATOM_PPD_CONN_B2B | ATOM_PPD_DEV_USD)
> -#define ATOM_PPD_TOPO_B2B_DSD	(ATOM_PPD_CONN_B2B | ATOM_PPD_DEV_DSD)
> -
> -#define ATOM_MW_COUNT			2
> -#define ATOM_DB_COUNT			34
> -#define ATOM_DB_VALID_MASK		(BIT_ULL(ATOM_DB_COUNT) - 1)
> -#define ATOM_DB_MSIX_VECTOR_COUNT	34
> -#define ATOM_DB_MSIX_VECTOR_SHIFT	1
> -#define ATOM_DB_TOTAL_SHIFT		34
> -#define ATOM_SPAD_COUNT			16
> -
> -#define ATOM_NTB_CTL_DOWN_BIT		BIT(16)
> -#define ATOM_NTB_CTL_ACTIVE(x)		!(x & ATOM_NTB_CTL_DOWN_BIT)
> -
> -#define ATOM_DESKEWSTS_DBERR		BIT(15)
> -#define ATOM_LTSSMERRSTS0_UNEXPECTEDEI	BIT(20)
> -#define ATOM_LTSSMSTATEJMP_FORCEDETECT	BIT(2)
> -#define ATOM_IBIST_ERR_OFLOW		0x7FFF7FFF
> -
> -#define ATOM_LINK_HB_TIMEOUT		msecs_to_jiffies(1000)
> -#define ATOM_LINK_RECOVERY_TIME		msecs_to_jiffies(500)
> -
>  /* Ntb control and link status */
> 
>  #define NTB_CTL_CFG_LOCK		BIT(0)



  reply	other threads:[~2017-11-13 14:06 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-10 23:23 [PATCH] ntb: remove Intel Atom NTB driver support Dave Jiang
2017-11-13 14:06 ` Allen Hubbe [this message]
2017-11-19  1:55   ` Jon Mason
2017-11-19  2:02     ` Jiang, Dave
2017-11-19  4:51       ` Jon Mason
2017-11-19  5:01         ` Jiang, Dave

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='000101d35c88$9430f360$bc92da20$@dell.com' \
    --to=allen.hubbe@dell.com \
    --cc=dave.jiang@intel.com \
    --cc=jdmason@kudzu.us \
    --cc=linux-ntb@googlegroups.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox