From: Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Liran Liss <liranl-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
"Hefty,
Sean" <sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Jason Gunthorpe
<jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>,
OFVWG <ofvwg-ZwoEplunGu1OwGhvXhtEPSCwEArCW2h5@public.gmane.org>,
"linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: Further thoughts on uAPI
Date: Tue, 26 Apr 2016 10:19:37 -0400 [thread overview]
Message-ID: <571F78F9.8010401@redhat.com> (raw)
In-Reply-To: <AM3PR05MB141161876D5CA05B1993D20CB1610-LOZWmgKjnYgmsg45OnKo/9qRiQSDpxhJvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
[-- Attachment #1.1: Type: text/plain, Size: 3504 bytes --]
On 4/24/2016 10:15 AM, Liran Liss wrote:
> For generic interfaces (currently includes Verbs, Ethernet QPs, and IB management), the new scheme should map what we have today in a flexible manner.
> This would enable us, for example, to pass only RoCE addressing attributes while modifying a RoCE QP (and optionally optimizing the kernel representation as well).
> These interfaces have a matching kAPI.
This sounds like something I was thinking as well. Of course, abstract
ideas are sometimes less similar than you think, so putting something
concrete down can help make sure that people are actually thinking about
the same thing.
For certain operations that have lots of optional items (work requests
for one, work completions for another), the old method has been to stick
everything in one struct (which bloats it for most uses), or the extreme
opposite end of the spectrum was the recent timestamping API patches
that totally deconstructed the wc struct and rebuilt it from individual
elements and completely reordered. Another approach to dealing this
this is tons of different structs (Christoph's work request struct rework).
Maybe we can reach a different arrangement. I'm thinking of one base
struct that's versioned. This base struct is the common items we always
need across the board:
struct __work_completion_common_v1 {
union { // Only first for alignment reasons
u64 wr_id;
struct ib_cqe *wr_cqe;
}
int magic = 1; /* magic starts as the version #
in the lower 8 bits, then we
add flags for optional struct
elements */
enum ib_wc_status status;
enum ib_wc_opcode opcode;
u32 len;
};
#define rdma_wc __work_completion_common_v1
Then we create optional, additional structs. Such as a specific struct
for each address type:
/* The common struct and option struct versions always match */
struct __work_completion_ib_addr_v1 {
struct ib_qp *qp;
u32 src_qp;
u16 pkey_index;
u16 slid;
u8 port_num;
u8 reserved[3]; // preserve u64 alignment
};
#define rdma_wc_ib_addr __work_completion_ib_addr_v1
struct __work_completion_eth_addr_v1 {
u8 smac[ETH_ALEN];
u16 vlan_id;
};
#define rdma_wc_eth_addr __work_completion_eth_addr_v1
....
Addtional optional struct items can then be defined, for things like
errors, immediate/invalidate data, timestamps, etc.
When building a wc, you start with the base struct, the magic is set to
the version, then for each optional element you add, you set a flag
field for that element in the magic item. Optional element flags occupy
the upper 24 bits. The length of the total struct is the length of the
base struct plus the length of all optional structs, and the order of
the optional structs matches their bit order from lowest to highest in
the magic element. It's not quite as free form as the patches for
timestamp support were, but still allows the structs some flexibility in
what is included and what isn't.
When parsing the wc, you verify you have the right version first, then
you process what you need from the common struct, and if you have need
of it, process any additional stuff by walking the set bits in the magic
struct to get to each optional struct item.
Something like that can be applied to wcs, wrs, and where there is
enough variability to warrant it, other items as well. Of course, if an
item doesn't vary all that much, then a single struct is still preferable.
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 884 bytes --]
next prev parent reply other threads:[~2016-04-26 14:19 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-20 1:25 Further thoughts on uAPI Jason Gunthorpe
[not found] ` <20160420012526.GA25508-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-04-20 4:54 ` Hefty, Sean
2016-04-21 12:32 ` Hefty, Sean
2016-04-21 13:35 ` Hefty, Sean
[not found] ` <1828884A29C6694DAF28B7E6B8A82373AB044043-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2016-04-21 13:54 ` Hefty, Sean
2016-04-21 14:03 ` Leon Romanovsky
[not found] ` <20160421140347.GI26951-2ukJVAZIZ/Y@public.gmane.org>
2016-04-21 14:35 ` Hefty, Sean
2016-04-21 17:24 ` Jason Gunthorpe
[not found] ` <20160421172428.GA5102-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-04-22 16:35 ` Hefty, Sean
2016-04-24 20:11 ` Hefty, Sean
[not found] ` <1828884A29C6694DAF28B7E6B8A82373AB045101-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2016-04-25 18:19 ` Jason Gunthorpe
[not found] ` <20160425181953.GC7675-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-04-25 19:16 ` Hefty, Sean
[not found] ` <1828884A29C6694DAF28B7E6B8A82373AB04548E-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2016-04-25 20:53 ` Jason Gunthorpe
2016-04-26 13:18 ` Doug Ledford
[not found] ` <571F6A8C.9080100-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-04-26 14:33 ` Jason Gunthorpe
2016-04-24 14:15 ` Liran Liss
[not found] ` <AM3PR05MB141161876D5CA05B1993D20CB1610-LOZWmgKjnYgmsg45OnKo/9qRiQSDpxhJvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2016-04-26 14:19 ` Doug Ledford [this message]
[not found] ` <571F78F9.8010401-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-04-26 14:58 ` Jason Gunthorpe
[not found] ` <20160426145813.GB24104-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-04-26 16:38 ` Doug Ledford
[not found] ` <571F9968.3080501-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-04-26 16:54 ` Jason Gunthorpe
2016-04-26 16:46 ` Hefty, Sean
2016-04-25 16:29 ` Hefty, Sean
[not found] ` <1828884A29C6694DAF28B7E6B8A82373AB0453F5-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2016-04-25 18:32 ` Jason Gunthorpe
[not found] ` <20160425183243.GD7675-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-04-25 18:51 ` Hefty, Sean
[not found] ` <1828884A29C6694DAF28B7E6B8A82373AB045460-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2016-04-25 20:22 ` Jason Gunthorpe
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=571F78F9.8010401@redhat.com \
--to=dledford-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=liranl-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
--cc=ofvwg-ZwoEplunGu1OwGhvXhtEPSCwEArCW2h5@public.gmane.org \
--cc=sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
/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