From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.dell-outbound.iphmx.com (esa2.dell-outbound.iphmx.com. [68.232.149.220]) by gmr-mx.google.com with ESMTPS id z131si973352ywz.4.2016.12.07.09.31.13 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Dec 2016 09:31:13 -0800 (PST) From: "Allen Hubbe" References: In-Reply-To: Subject: RE: [PATCH v5] ntb_transport: Limit memory windows based on available, scratchpads Date: Wed, 7 Dec 2016 12:30:52 -0500 Message-ID: <000201d250af$a961bf20$fc253d60$@dell.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Language: en-us To: 'Shyam Sundar S K' , 'Dave Jiang' , 'Jon Mason' , linux-ntb@googlegroups.com, "'Shah, Nehal-bakulchandra'" , "'Sen, Pankaj'" , "'Agrawal, Nitesh-kumar'" , "'Subramaniyan, Ramkumar'" , "'Su, Richard (Bin)'" List-ID: From: Shyam Sundar S K > When the underlying NTB H/W driver advertises more memory windows > than the number of scratchpads available to setup MW's, it is likely > that we may end up filling the remaining memory windows with garbage. > So to avoid that, lets limit the memory windows that transport driver > can setup based on the available scratchpads. > > Reviewed-by: Shah, Nehal-bakulchandra > Reviewed-by: Agrawal, Nitesh-kumar > Signed-off-by: S-k, Shyam-sundar Acked-by: Allen Hubbe > --- > drivers/ntb/ntb_transport.c | 27 +++++++++++++++------------ > 1 file changed, 15 insertions(+), 12 deletions(-) > > diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c > index 4eb8adb..6adbfa3 100644 > --- a/drivers/ntb/ntb_transport.c > +++ b/drivers/ntb/ntb_transport.c > @@ -66,6 +66,7 @@ > #define NTB_TRANSPORT_VER "4" > #define NTB_TRANSPORT_NAME "ntb_transport" > #define NTB_TRANSPORT_DESC "Software Queue-Pair Transport over NTB" > +#define NTB_TRANSPORT_MIN_SPADS (MW0_SZ_HIGH + 2) > > MODULE_DESCRIPTION(NTB_TRANSPORT_DESC); > MODULE_VERSION(NTB_TRANSPORT_VER); > @@ -242,9 +243,6 @@ enum { > NUM_MWS, > MW0_SZ_HIGH, > MW0_SZ_LOW, > - MW1_SZ_HIGH, > - MW1_SZ_LOW, > - MAX_SPAD, > }; > > #define dev_client_dev(__dev) \ > @@ -811,7 +809,7 @@ static void ntb_transport_link_cleanup(struct ntb_transport_ctx *nt) > { > struct ntb_transport_qp *qp; > u64 qp_bitmap_alloc; > - int i; > + unsigned int i, count; > > qp_bitmap_alloc = nt->qp_bitmap & ~nt->qp_bitmap_free; > > @@ -831,7 +829,8 @@ static void ntb_transport_link_cleanup(struct ntb_transport_ctx *nt) > * goes down, blast them now to give them a sane value the next > * time they are accessed > */ > - for (i = 0; i < MAX_SPAD; i++) > + count = ntb_spad_count(nt->ndev); > + for (i = 0; i < count; i++) > ntb_spad_write(nt->ndev, i, 0); > } > > @@ -1064,17 +1063,12 @@ static int ntb_transport_probe(struct ntb_client *self, struct > ntb_dev *ndev) > { > struct ntb_transport_ctx *nt; > struct ntb_transport_mw *mw; > - unsigned int mw_count, qp_count; > + unsigned int mw_count, qp_count, spad_count, max_mw_count_for_spads; > u64 qp_bitmap; > int node; > int rc, i; > > mw_count = ntb_mw_count(ndev); > - if (ntb_spad_count(ndev) < (NUM_MWS + 1 + mw_count * 2)) { > - dev_err(&ndev->dev, "Not enough scratch pad registers for %s", > - NTB_TRANSPORT_NAME); > - return -EIO; > - } > > if (ntb_db_is_unsafe(ndev)) > dev_dbg(&ndev->dev, > @@ -1090,8 +1084,17 @@ static int ntb_transport_probe(struct ntb_client *self, struct > ntb_dev *ndev) > return -ENOMEM; > > nt->ndev = ndev; > + spad_count = ntb_spad_count(ndev); > + > + /* Limit the MW's based on the availability of scratchpads */ > + > + if (spad_count < NTB_TRANSPORT_MIN_SPADS) { > + nt->mw_count = 0; > + goto err; > + } > > - nt->mw_count = mw_count; > + max_mw_count_for_spads = (spad_count - MW0_SZ_HIGH) / 2; > + nt->mw_count = min(mw_count, max_mw_count_for_spads); > > nt->mw_vec = kzalloc_node(mw_count * sizeof(*nt->mw_vec), > GFP_KERNEL, node); > -- > 2.7.4