All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bart Van Assche <Bart.VanAssche@wdc.com>
To: "roman.penyaev@profitbricks.com" <roman.penyaev@profitbricks.com>,
	"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
	"linux-rdma@vger.kernel.org" <linux-rdma@vger.kernel.org>
Cc: "danil.kipnis@profitbricks.com" <danil.kipnis@profitbricks.com>,
	"hch@infradead.org" <hch@infradead.org>,
	"ogerlitz@mellanox.com" <ogerlitz@mellanox.com>,
	"jinpu.wang@profitbricks.com" <jinpu.wang@profitbricks.com>,
	"axboe@kernel.dk" <axboe@kernel.dk>,
	"sagi@grimberg.me" <sagi@grimberg.me>
Subject: Re: [PATCH 05/24] ibtrs: client: main functionality
Date: Fri, 2 Feb 2018 16:54:34 +0000	[thread overview]
Message-ID: <1517590473.2675.21.camel@wdc.com> (raw)
In-Reply-To: <20180202140904.2017-6-roman.penyaev@profitbricks.com>

T24gRnJpLCAyMDE4LTAyLTAyIGF0IDE1OjA4ICswMTAwLCBSb21hbiBQZW4gd3JvdGU6DQo+ICtz
dGF0aWMgaW5saW5lIHN0cnVjdCBpYnRyc190YWcgKg0KPiArX19pYnRyc19nZXRfdGFnKHN0cnVj
dCBpYnRyc19jbHQgKmNsdCwgZW51bSBpYnRyc19jbHRfY29uX3R5cGUgY29uX3R5cGUpDQo+ICt7
DQo+ICsJc2l6ZV90IG1heF9kZXB0aCA9IGNsdC0+cXVldWVfZGVwdGg7DQo+ICsJc3RydWN0IGli
dHJzX3RhZyAqdGFnOw0KPiArCWludCBjcHUsIGJpdDsNCj4gKw0KPiArCWNwdSA9IGdldF9jcHUo
KTsNCj4gKwlkbyB7DQo+ICsJCWJpdCA9IGZpbmRfZmlyc3RfemVyb19iaXQoY2x0LT50YWdzX21h
cCwgbWF4X2RlcHRoKTsNCj4gKwkJaWYgKHVubGlrZWx5KGJpdCA+PSBtYXhfZGVwdGgpKSB7DQo+
ICsJCQlwdXRfY3B1KCk7DQo+ICsJCQlyZXR1cm4gTlVMTDsNCj4gKwkJfQ0KPiArDQo+ICsJfSB3
aGlsZSAodW5saWtlbHkodGVzdF9hbmRfc2V0X2JpdF9sb2NrKGJpdCwgY2x0LT50YWdzX21hcCkp
KTsNCj4gKwlwdXRfY3B1KCk7DQo+ICsNCj4gKwl0YWcgPSBHRVRfVEFHKGNsdCwgYml0KTsNCj4g
KwlXQVJOX09OKHRhZy0+bWVtX2lkICE9IGJpdCk7DQo+ICsJdGFnLT5jcHVfaWQgPSBjcHU7DQo+
ICsJdGFnLT5jb25fdHlwZSA9IGNvbl90eXBlOw0KPiArDQo+ICsJcmV0dXJuIHRhZzsNCj4gK30N
Cj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIF9faWJ0cnNfcHV0X3RhZyhzdHJ1Y3QgaWJ0cnNf
Y2x0ICpjbHQsDQo+ICsJCQkJICAgc3RydWN0IGlidHJzX3RhZyAqdGFnKQ0KPiArew0KPiArCWNs
ZWFyX2JpdF91bmxvY2sodGFnLT5tZW1faWQsIGNsdC0+dGFnc19tYXApOw0KPiArfQ0KPiArDQo+
ICtzdHJ1Y3QgaWJ0cnNfdGFnICppYnRyc19jbHRfZ2V0X3RhZyhzdHJ1Y3QgaWJ0cnNfY2x0ICpj
bHQsDQo+ICsJCQkJICAgIGVudW0gaWJ0cnNfY2x0X2Nvbl90eXBlIGNvbl90eXBlLA0KPiArCQkJ
CSAgICBpbnQgY2FuX3dhaXQpDQo+ICt7DQo+ICsJc3RydWN0IGlidHJzX3RhZyAqdGFnOw0KPiAr
CURFRklORV9XQUlUKHdhaXQpOw0KPiArDQo+ICsJdGFnID0gX19pYnRyc19nZXRfdGFnKGNsdCwg
Y29uX3R5cGUpOw0KPiArCWlmIChsaWtlbHkodGFnKSB8fCAhY2FuX3dhaXQpDQo+ICsJCXJldHVy
biB0YWc7DQo+ICsNCj4gKwlkbyB7DQo+ICsJCXByZXBhcmVfdG9fd2FpdCgmY2x0LT50YWdzX3dh
aXQsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7DQo+ICsJCXRhZyA9IF9faWJ0cnNfZ2V0
X3RhZyhjbHQsIGNvbl90eXBlKTsNCj4gKwkJaWYgKGxpa2VseSh0YWcpKQ0KPiArCQkJYnJlYWs7
DQo+ICsNCj4gKwkJaW9fc2NoZWR1bGUoKTsNCj4gKwl9IHdoaWxlICgxKTsNCj4gKw0KPiArCWZp
bmlzaF93YWl0KCZjbHQtPnRhZ3Nfd2FpdCwgJndhaXQpOw0KPiArDQo+ICsJcmV0dXJuIHRhZzsN
Cj4gK30NCj4gK0VYUE9SVF9TWU1CT0woaWJ0cnNfY2x0X2dldF90YWcpOw0KPiArDQo+ICt2b2lk
IGlidHJzX2NsdF9wdXRfdGFnKHN0cnVjdCBpYnRyc19jbHQgKmNsdCwgc3RydWN0IGlidHJzX3Rh
ZyAqdGFnKQ0KPiArew0KPiArCWlmIChXQVJOX09OKCF0ZXN0X2JpdCh0YWctPm1lbV9pZCwgY2x0
LT50YWdzX21hcCkpKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlfX2lidHJzX3B1dF90YWcoY2x0
LCB0YWcpOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBQdXR0aW5nIGEgdGFnIGlzIGEgYmFycmllciwg
c28gd2Ugd2lsbCBvYnNlcnZlDQo+ICsJICogbmV3IGVudHJ5IGluIHRoZSB3YWl0IGxpc3QsIG5v
IHdvcnJpZXMuDQo+ICsJICovDQo+ICsJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmNsdC0+dGFnc193
YWl0KSkNCj4gKwkJd2FrZV91cCgmY2x0LT50YWdzX3dhaXQpOw0KPiArfQ0KPiArRVhQT1JUX1NZ
TUJPTChpYnRyc19jbHRfcHV0X3RhZyk7DQoNCkRvIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIGFueSBh
ZHZhbnRhZ2Ugb3ZlciB0aGUgY29kZSBpbiBsaWIvc2JpdG1hcC5jPyBJZiBub3QsDQpwbGVhc2Ug
Y2FsbCB0aGUgc2JpdG1hcCBmdW5jdGlvbnMgaW5zdGVhZCBvZiBhZGRpbmcgYW4gYWRkaXRpb25h
bCB0YWcgYWxsb2NhdG9yLg0KDQpUaGFua3MsDQoNCkJhcnQu

WARNING: multiple messages have this Message-ID (diff)
From: Bart Van Assche <Bart.VanAssche@wdc.com>
To: "roman.penyaev@profitbricks.com" <roman.penyaev@profitbricks.com>,
	"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
	"linux-rdma@vger.kernel.org" <linux-rdma@vger.kernel.org>
Cc: "danil.kipnis@profitbricks.com" <danil.kipnis@profitbricks.com>,
	"hch@infradead.org" <hch@infradead.org>,
	"ogerlitz@mellanox.com" <ogerlitz@mellanox.com>,
	"jinpu.wang@profitbricks.com" <jinpu.wang@profitbricks.com>,
	"axboe@kernel.dk" <axboe@kernel.dk>,
	"sagi@grimberg.me" <sagi@grimberg.me>
Subject: Re: [PATCH 05/24] ibtrs: client: main functionality
Date: Fri, 2 Feb 2018 16:54:34 +0000	[thread overview]
Message-ID: <1517590473.2675.21.camel@wdc.com> (raw)
In-Reply-To: <20180202140904.2017-6-roman.penyaev@profitbricks.com>

On Fri, 2018-02-02 at 15:08 +0100, Roman Pen wrote:
> +static inline struct ibtrs_tag *
> +__ibtrs_get_tag(struct ibtrs_clt *clt, enum ibtrs_clt_con_type con_type)
> +{
> +	size_t max_depth = clt->queue_depth;
> +	struct ibtrs_tag *tag;
> +	int cpu, bit;
> +
> +	cpu = get_cpu();
> +	do {
> +		bit = find_first_zero_bit(clt->tags_map, max_depth);
> +		if (unlikely(bit >= max_depth)) {
> +			put_cpu();
> +			return NULL;
> +		}
> +
> +	} while (unlikely(test_and_set_bit_lock(bit, clt->tags_map)));
> +	put_cpu();
> +
> +	tag = GET_TAG(clt, bit);
> +	WARN_ON(tag->mem_id != bit);
> +	tag->cpu_id = cpu;
> +	tag->con_type = con_type;
> +
> +	return tag;
> +}
> +
> +static inline void __ibtrs_put_tag(struct ibtrs_clt *clt,
> +				   struct ibtrs_tag *tag)
> +{
> +	clear_bit_unlock(tag->mem_id, clt->tags_map);
> +}
> +
> +struct ibtrs_tag *ibtrs_clt_get_tag(struct ibtrs_clt *clt,
> +				    enum ibtrs_clt_con_type con_type,
> +				    int can_wait)
> +{
> +	struct ibtrs_tag *tag;
> +	DEFINE_WAIT(wait);
> +
> +	tag = __ibtrs_get_tag(clt, con_type);
> +	if (likely(tag) || !can_wait)
> +		return tag;
> +
> +	do {
> +		prepare_to_wait(&clt->tags_wait, &wait, TASK_UNINTERRUPTIBLE);
> +		tag = __ibtrs_get_tag(clt, con_type);
> +		if (likely(tag))
> +			break;
> +
> +		io_schedule();
> +	} while (1);
> +
> +	finish_wait(&clt->tags_wait, &wait);
> +
> +	return tag;
> +}
> +EXPORT_SYMBOL(ibtrs_clt_get_tag);
> +
> +void ibtrs_clt_put_tag(struct ibtrs_clt *clt, struct ibtrs_tag *tag)
> +{
> +	if (WARN_ON(!test_bit(tag->mem_id, clt->tags_map)))
> +		return;
> +
> +	__ibtrs_put_tag(clt, tag);
> +
> +	/*
> +	 * Putting a tag is a barrier, so we will observe
> +	 * new entry in the wait list, no worries.
> +	 */
> +	if (waitqueue_active(&clt->tags_wait))
> +		wake_up(&clt->tags_wait);
> +}
> +EXPORT_SYMBOL(ibtrs_clt_put_tag);

Do these functions have any advantage over the code in lib/sbitmap.c? If not,
please call the sbitmap functions instead of adding an additional tag allocator.

Thanks,

Bart.

  reply	other threads:[~2018-02-02 16:54 UTC|newest]

Thread overview: 124+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-02 14:08 [PATCH 00/24] InfiniBand Transport (IBTRS) and Network Block Device (IBNBD) Roman Pen
2018-02-02 14:08 ` Roman Pen
2018-02-02 14:08 ` [PATCH 01/24] ibtrs: public interface header to establish RDMA connections Roman Pen
2018-02-02 14:08   ` Roman Pen
2018-02-02 14:08 ` [PATCH 02/24] ibtrs: private headers with IBTRS protocol structs and helpers Roman Pen
2018-02-02 14:08 ` [PATCH 03/24] ibtrs: core: lib functions shared between client and server modules Roman Pen
2018-02-02 14:08   ` Roman Pen
2018-02-05 10:52   ` Sagi Grimberg
2018-02-06 12:01     ` Roman Penyaev
2018-02-06 16:10       ` Jason Gunthorpe
2018-02-07 10:34         ` Roman Penyaev
2018-02-07 10:34           ` Roman Penyaev
2018-02-02 14:08 ` [PATCH 04/24] ibtrs: client: private header with client structs and functions Roman Pen
2018-02-02 14:08   ` Roman Pen
2018-02-05 10:59   ` Sagi Grimberg
2018-02-05 10:59     ` Sagi Grimberg
2018-02-06 12:23     ` Roman Penyaev
2018-02-02 14:08 ` [PATCH 05/24] ibtrs: client: main functionality Roman Pen
2018-02-02 16:54   ` Bart Van Assche [this message]
2018-02-02 16:54     ` Bart Van Assche
2018-02-05 13:27     ` Roman Penyaev
2018-02-05 14:14       ` Sagi Grimberg
2018-02-05 14:14         ` Sagi Grimberg
2018-02-05 17:05         ` Roman Penyaev
2018-02-05 17:05           ` Roman Penyaev
2018-02-05 11:19   ` Sagi Grimberg
2018-02-05 14:19     ` Roman Penyaev
2018-02-05 14:19       ` Roman Penyaev
2018-02-05 16:24       ` Bart Van Assche
2018-02-05 16:24         ` Bart Van Assche
2018-02-02 14:08 ` [PATCH 06/24] ibtrs: client: statistics functions Roman Pen
2018-02-02 14:08 ` [PATCH 07/24] ibtrs: client: sysfs interface functions Roman Pen
2018-02-02 14:08   ` Roman Pen
2018-02-05 11:20   ` Sagi Grimberg
2018-02-05 11:20     ` Sagi Grimberg
2018-02-06 12:28     ` Roman Penyaev
2018-02-02 14:08 ` [PATCH 08/24] ibtrs: server: private header with server structs and functions Roman Pen
2018-02-02 14:08 ` [PATCH 09/24] ibtrs: server: main functionality Roman Pen
2018-02-02 14:08   ` Roman Pen
2018-02-05 11:29   ` Sagi Grimberg
2018-02-05 11:29     ` Sagi Grimberg
2018-02-06 12:46     ` Roman Penyaev
2018-02-02 14:08 ` [PATCH 10/24] ibtrs: server: statistics functions Roman Pen
2018-02-02 14:08 ` [PATCH 11/24] ibtrs: server: sysfs interface functions Roman Pen
2018-02-02 14:08   ` Roman Pen
2018-02-02 14:08 ` [PATCH 12/24] ibtrs: include client and server modules into kernel compilation Roman Pen
2018-02-02 14:08 ` [PATCH 13/24] ibtrs: a bit of documentation Roman Pen
2018-02-02 14:08 ` [PATCH 14/24] ibnbd: private headers with IBNBD protocol structs and helpers Roman Pen
2018-02-02 14:08   ` Roman Pen
2018-02-02 14:08 ` [PATCH 15/24] ibnbd: client: private header with client structs and functions Roman Pen
2018-02-02 14:08   ` Roman Pen
2018-02-02 14:08 ` [PATCH 16/24] ibnbd: client: main functionality Roman Pen
2018-02-02 14:08   ` Roman Pen
2018-02-02 15:11   ` Jens Axboe
2018-02-02 15:11     ` Jens Axboe
2018-02-05 12:54     ` Roman Penyaev
2018-02-02 14:08 ` [PATCH 17/24] ibnbd: client: sysfs interface functions Roman Pen
2018-02-02 14:08   ` Roman Pen
2018-02-02 14:08 ` [PATCH 18/24] ibnbd: server: private header with server structs and functions Roman Pen
2018-02-02 14:08 ` [PATCH 19/24] ibnbd: server: main functionality Roman Pen
2018-02-02 14:09 ` [PATCH 20/24] ibnbd: server: functionality for IO submission to file or block dev Roman Pen
2018-02-02 14:09   ` Roman Pen
2018-02-02 14:09 ` [PATCH 21/24] ibnbd: server: sysfs interface functions Roman Pen
2018-02-02 14:09   ` Roman Pen
2018-02-02 14:09 ` [PATCH 22/24] ibnbd: include client and server modules into kernel compilation Roman Pen
2018-02-02 14:09 ` [PATCH 23/24] ibnbd: a bit of documentation Roman Pen
2018-02-02 14:09   ` Roman Pen
2018-02-02 15:55   ` Bart Van Assche
2018-02-02 15:55     ` Bart Van Assche
2018-02-05 13:03     ` Roman Penyaev
2018-02-05 14:16       ` Sagi Grimberg
2018-02-02 14:09 ` [PATCH 24/24] MAINTAINERS: Add maintainer for IBNBD/IBTRS modules Roman Pen
2018-02-02 16:07 ` [PATCH 00/24] InfiniBand Transport (IBTRS) and Network Block Device (IBNBD) Bart Van Assche
2018-02-02 16:07   ` Bart Van Assche
2018-02-02 16:40   ` Doug Ledford
2018-02-02 16:40     ` Doug Ledford
2018-02-05  8:45     ` Jinpu Wang
2018-02-05  8:45       ` Jinpu Wang
2018-06-04 12:14     ` Danil Kipnis
2018-02-02 17:05 ` Bart Van Assche
2018-02-02 17:05   ` Bart Van Assche
2018-02-05  8:56   ` Jinpu Wang
2018-02-05 11:36     ` Sagi Grimberg
2018-02-05 13:38       ` Danil Kipnis
2018-02-05 13:38         ` Danil Kipnis
2018-02-05 14:17         ` Sagi Grimberg
2018-02-05 16:40           ` Danil Kipnis
2018-02-05 18:38             ` Bart Van Assche
2018-02-06  9:44               ` Danil Kipnis
2018-02-06  9:44                 ` Danil Kipnis
2018-02-06 15:35                 ` Bart Van Assche
2018-02-06 15:35                   ` Bart Van Assche
2018-02-05 16:16     ` Bart Van Assche
2018-02-05 16:16       ` Bart Van Assche
2018-02-05 16:36       ` Jinpu Wang
2018-02-05 16:36         ` Jinpu Wang
2018-02-07 16:35       ` Christopher Lameter
2018-02-07 17:18         ` Roman Penyaev
2018-02-07 17:32           ` Bart Van Assche
2018-02-07 17:32             ` Bart Van Assche
2018-02-08 17:38             ` Danil Kipnis
2018-02-08 17:38               ` Danil Kipnis
2018-02-08 18:09               ` Bart Van Assche
2018-02-08 18:09                 ` Bart Van Assche
2018-06-04 12:27                 ` Danil Kipnis
2018-02-05 12:16 ` Sagi Grimberg
2018-02-05 12:16   ` Sagi Grimberg
2018-02-05 12:30   ` Sagi Grimberg
2018-02-07 13:06     ` Roman Penyaev
2018-02-07 13:06       ` Roman Penyaev
2018-02-05 16:58   ` Bart Van Assche
2018-02-05 16:58     ` Bart Van Assche
2018-02-05 17:16     ` Roman Penyaev
2018-02-05 17:20       ` Bart Van Assche
2018-02-05 17:20         ` Bart Van Assche
2018-02-06 11:47         ` Roman Penyaev
2018-02-06 13:12   ` Roman Penyaev
2018-02-06 13:12     ` Roman Penyaev
2018-02-06 16:01     ` Bart Van Assche
2018-02-06 16:01       ` Bart Van Assche
2018-02-07 12:57       ` Roman Penyaev
2018-02-07 12:57         ` Roman Penyaev
2018-02-07 16:35         ` Bart Van Assche
2018-02-07 16:35           ` Bart Van Assche

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=1517590473.2675.21.camel@wdc.com \
    --to=bart.vanassche@wdc.com \
    --cc=axboe@kernel.dk \
    --cc=danil.kipnis@profitbricks.com \
    --cc=hch@infradead.org \
    --cc=jinpu.wang@profitbricks.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=ogerlitz@mellanox.com \
    --cc=roman.penyaev@profitbricks.com \
    --cc=sagi@grimberg.me \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.