Linux userland API discussions
 help / color / mirror / Atom feed
From: Jiri Pirko <jiri@resnulli.us>
To: Jason Gunthorpe <jgg@nvidia.com>
Cc: linux-coco@lists.linux.dev, linux-kernel@vger.kernel.org,
	 linux-api@vger.kernel.org, x86@kernel.org, kvm@vger.kernel.org,
	linux-doc@vger.kernel.org,  jgg@ziepe.ca,
	david.quigley@intel.com, lukas@wunner.de, ksinyuk@kernel.org,
	 rodrigo.vivi@intel.com, cedric.xing@intel.com, sameo@meta.com,
	drdeeglaze@gmail.com,  James.Bottomley@hansenpartnership.com,
	aik@amd.com, jpiotrowski@nvidia.com, qinkun@google.com,
	 pgonda@google.com, jic23@kernel.org, alistair.francis@wdc.com,
	ankita@nvidia.com,  suzuki.poulose@arm.com, kas@kernel.org,
	rick.p.edgecombe@intel.com,  elena.reshetova@intel.com,
	dave.hansen@linux.intel.com,
	 sathyanarayanan.kuppuswamy@linux.intel.com,
	peter.fang@intel.com
Subject: Re: [PATCH RFC 11/20] ctlv: Prepare runtime introspection
Date: Mon, 26 Oct 2026 15:52:30 +0100	[thread overview]
Message-ID: <at9nsxtGOl3N5PJR@FV6GYCPJ69> (raw)
In-Reply-To: <179302367452.58760.11808905856343064399.b4-review@b4>

Mon, Oct 26, 2026 at 03:07:54PM +0100, jgg@nvidia.com wrote:
>> [ ... 53 lines skipped ... ]
>> +/* A cursor packs the record and member where fragmentation resumes. */
>> +#define CTLV_INTROSPECTION_MEMBER_SHIFT 48
>> +#define CTLV_INTROSPECTION_RECORD_MASK GENMASK_ULL(CTLV_INTROSPECTION_MEMBER_SHIFT - 1, 0)
>
>Use genmask for everything:
>
> #define CTLV_INTROSPECTION_MEMBER_MASK GENMASK_U64(63, 48)
> #define CTLV_INTROSPECTION_RECORD_MASK GENMASK_U64(47, 0)
>
>	pos->record = FIELD_GET(CTLV_INTROSPECTION_RECORD_MASK, cursor);
>	pos->member = FIELD_GET(CTLV_INTROSPECTION_MEMBER_MASK, cursor);
>
>	return FIELD_PREP(CTLV_INTROSPECTION_RECORD_MASK, pos->record) |
>	       FIELD_PREP(CTLV_INTROSPECTION_MEMBER_MASK, pos->member);
>
>> +
>> +struct ctlv_introspection_dump_position {
>> +	u64 record;
>> +	u32 member;
>
>Maybe a comment describing how record and member are encoded for each
>of the users?
>
>> [ ... 13 lines skipped ... ]
>> +/* The immutable root-first chain always has generation zero. */
>
>This comment seems out of place, it should be closer to the 0's it
>refers to a function below
>
>> +static bool ctlv_introspection_family_record(struct ctlv_cursor *reply, struct ctlv_cursor *entry,
>> +					     const struct ctlv_family *family,
>> +					     struct ctlv_introspection_dump_position *pos)
>> +{
>> +	const struct ctlv_family_schema *schema = family->schema;
>> +
>> +	if (!ctlv_family_entry_start(reply, entry))
>> +		return false;
>
>I'm finding it quite hard to go from this statement to the YAML. I get this:
>
>CTLV_NEST_START(ctlv_family_entry, CTLV_ATTR_FAMILY_ENTRY, CTLV_SCHEMA_NEST)
>
>I asked AI and it said it was this:
>
>attr-sets:
>  - name: family-entry
>    attrs:
>      - family.id
>      - family.name
>
>Which is some cyclical reference to this one:
>
>attr-groups:
>  # One record per family of the chain a device answers, as reported by
>  # families-dump.
>  - name: family
>    attrs:
>      - name: id
>        type: uint
>      - name: name
>        type: string
>        max-length: 63
>      - name: entry
>        attrs: family-entry
>        max-occurrences: unlimited
>
>But having poked it some more I see that AI was wrong, and it is the
>reverse..

Yep. Already spotted. Will fix.

>
>But.. Where is the actual op? I finally see it is here:
>
>ops:
>  - name: families-dump
>    type: query
>    fd-access: read
>    reply:
>      attrs: family.entry
>
>So.. The op points to family.entry which points back to family.id and
>family.name through the attr-sets? I queried AI for a while and came
>to this:
>
>  The confusing part is that the family group contains both the leaf
>  attributes and the container that holds them. Their grouping
>  establishes names and attribute IDs; it doesn't imply
>  nesting. Nesting comes from attrs: family-entry.

True, will fix.


>
>I don't have a constructive idea yet. I've been trying to understand
>the yaml in this series for a while now, and I think it is just
>unreadable in this organization. The information is spread about all
>over the place and it is very hard to construct an idea of what is
>actually in a particular system call. Maybe the missing html
>generation would be helpful..
>
>Poking at AI some more I understand it is like this because this is
>how the ABI numbers are generated, things need to be in these lists so
>they can be automatically numbered.
>
>Going the other way isn't much better..
>
>ops:
>  - name: device-get
>    type: action
>    fd-access: read
>    reply:
>      attrs: device-reply
>
>Okay, so then I see:
>
>  - name: device-reply
>    attrs:
>      - device.caps
>      - device.info
>
>Uh, why do we have this extra layer? but OK..
>
>attr-groups:
>  - name: device
>    attrs:
>      - name: caps
>        attrs: device-caps
>
>Er.. 
>
>  - name: device-caps
>    optional-attrs:
>      - cap.evidence
>      - cap.mr
>
>Getting closer!!
>
>  - name: cap
>    attrs:
>      - name: evidence
>        attrs: evidence-cap
>
>Oh, apparently not..
>
>  - name: evidence-cap
>    attrs:
>      - cap.min-challenge-length
>      - cap.max-challenge-length
>      - cap.max-total-output-length
>      - cap.object
>
>This time for sure!
>
>  - name: cap
>    attrs:
>      - name: min-challenge-length
>        type: uint
>
>It is too much, this going back and forth to the sets is very
>obfuscating. Everything is called attr. There is no editor aid to jump
>between the sections, by the time you figure out what type a single
>value is you've lost the trail for the rest of it.
>
>This isn't even that complicated, if I ask AI to explain it in a C ish
>language:
>
>struct device_get_reply {
>	struct {
>		optional struct {
>			uint min_challenge_length;
>			uint max_challenge_length;
>			uint max_total_output_length;
>			struct {
>				enum blob_class;
>				string format;
>				enum representation;
>				uint max_length;
>			} objects[];
>		} evidence;
>
>		optional struct {
>			flags mr_flags; /* read, extend */
>		} mr;
>	} caps;
>
>	struct {
>		/* device-info: filled by the derived family */
>	} info;
>};
>
>I think the yaml names are not helping, calling everything attrs
>everywhere is really confusing. At least the transition into a nest
>and an attr-set should be more clearly marked in the yaml..
>
>The yaml would be significantly better if it was layed out according
>to the actual semantic flow instead of artificially being twisted into
>this need to put everything into a linear list. AI invented this:
>
>device-get:
>  request: {}
>  reply:
>    caps:
>      evidence?:
>        min-challenge-length: uint
>        max-challenge-length: uint
>        max-total-output-length: uint
>        objects[]:
>          blob-class: evidence-blob-class
>          format: string
>          representation: evidence-representation
>          max-length: uint
>      mr?:
>        mr-flags: mr-device-caps
>    info:
>      $extend: device-info
>
>So.. how about could we drop the sets, use a direct description of the
>layout and do something else for the ID numbering? Maybe the numbering
>can be solved directly by only listing the names in:

I didn't want to have a lot of duplications. Netlink show us that the
same attr, or attr group (or nest) is often used in multiple ops. It is
not good to repeat them each time (multiple obvious reasons), so I came
with the sets and groups. But I will think about how to make this
possible to be formatted in more readable way.


>
>numbering:
>  - device-get.reply
>  - device-get.reply.caps
>  - device-get.caps.evidence
>  -[..]
>
>?
>
>-- 
>Jason

  reply	other threads:[~2026-10-26 14:52 UTC|newest]

Thread overview: 138+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-15 14:50 [PATCH RFC 00/20] attestation: Add a common subsystem and TDX support Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 01/20] ctlv: Add the schema language and generator Jiri Pirko
2026-10-20 22:31   ` Jonathan Cameron
2026-10-21 13:23     ` Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 02/20] ctlv: Add the UAPI wire format and family API Jiri Pirko
2026-10-19 23:29   ` Jason Gunthorpe
2026-10-20 12:26     ` Jiri Pirko
2026-10-20 23:00   ` Jonathan Cameron
2026-10-20 23:39     ` Jonathan Cameron
2026-10-21 13:54     ` Jiri Pirko
2026-10-26 18:55   ` Yeoreum Yun
2026-10-15 14:50 ` [PATCH RFC 03/20] ctlv: Add the root family specification and generated files Jiri Pirko
2026-10-19 23:29   ` Jason Gunthorpe
2026-10-20 12:28     ` Jiri Pirko
2026-10-20 12:55       ` Jason Gunthorpe
2026-10-20 14:07         ` Jiri Pirko
2026-10-20 23:30   ` Jonathan Cameron
2026-10-21 16:25     ` Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 04/20] Documentation: ctlv: Add userspace ABI Jiri Pirko
2026-10-19 23:29   ` Jason Gunthorpe
2026-10-20 14:06     ` Jiri Pirko
2026-10-21  0:11   ` Jonathan Cameron
2026-10-22  9:01     ` Jiri Pirko
2026-10-23 19:23       ` Jonathan Cameron
2026-10-15 14:50 ` [PATCH RFC 05/20] ctlv: Prepare message input handling Jiri Pirko
2026-10-21  0:43   ` Jonathan Cameron
2026-10-22  8:27     ` Jiri Pirko
2026-10-22 18:39     ` Jason Gunthorpe
2026-10-23 12:55       ` Jiri Pirko
2026-10-26 14:07   ` Jason Gunthorpe
2026-10-15 14:50 ` [PATCH RFC 06/20] ctlv: Prepare blob descriptor validation Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 07/20] ctlv: Prepare schema validation Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 08/20] ctlv: Prepare message output handling Jiri Pirko
2026-10-26 14:07   ` Jason Gunthorpe
2026-10-15 14:50 ` [PATCH RFC 09/20] ctlv: Prepare VA blob handling Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 10/20] ctlv: Prepare event queue support Jiri Pirko
2026-10-21  1:12   ` Jonathan Cameron
2026-10-22  9:04     ` Jiri Pirko
2026-10-26 14:07   ` Jason Gunthorpe
2026-10-26 14:45     ` Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 11/20] ctlv: Prepare runtime introspection Jiri Pirko
2026-10-26 14:07   ` Jason Gunthorpe
2026-10-26 14:52     ` Jiri Pirko [this message]
2026-10-26 16:12       ` Jason Gunthorpe
2026-10-15 14:50 ` [PATCH RFC 12/20] ctlv: Add device and operation dispatch Jiri Pirko
2026-10-21  1:25   ` Jonathan Cameron
2026-10-22  9:05     ` Jiri Pirko
2026-10-22 18:43     ` Jason Gunthorpe
2026-10-23 12:58       ` Jiri Pirko
2026-10-23 14:26         ` Jason Gunthorpe
2026-10-26 13:48           ` Jiri Pirko
2026-10-26 14:07   ` Jason Gunthorpe
2026-10-15 14:50 ` [PATCH RFC 13/20] Documentation: ctlv: Describe how to write a family Jiri Pirko
2026-10-19 23:29   ` Jason Gunthorpe
2026-10-21 14:23     ` Jiri Pirko
2026-10-21 14:49       ` Jason Gunthorpe
2026-10-21 16:24         ` Jiri Pirko
2026-10-21 16:48           ` Jason Gunthorpe
2026-10-22  8:22             ` Jiri Pirko
2026-10-22 19:21               ` Jason Gunthorpe
2026-10-23 13:01                 ` Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 14/20] attestation: Add the base family specification and generated files Jiri Pirko
2026-10-26 14:07   ` Jason Gunthorpe
2026-10-15 14:50 ` [PATCH RFC 15/20] attestation: Prepare provider and instance core Jiri Pirko
2026-10-19 23:29   ` Jason Gunthorpe
2026-10-21 13:04     ` Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 16/20] attestation: Prepare measurement register journal Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 17/20] attestation: Add CTLV operation handling Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 18/20] tdx-guest: Expose the native attestation service API Jiri Pirko
2026-10-26 14:07   ` Jason Gunthorpe
2026-10-15 14:50 ` [PATCH RFC 19/20] attestation: Add the TDX family specification and generated files Jiri Pirko
2026-10-15 14:50 ` [PATCH RFC 20/20] attestation: Add the TDX family implementation Jiri Pirko
2026-10-22 22:07   ` Edgecombe, Rick P
2026-10-23 14:12     ` Jason Gunthorpe
2026-10-23 19:40       ` Edgecombe, Rick P
2026-10-23 22:00         ` Jason Gunthorpe
2026-10-23 18:15     ` Jiri Pirko
2026-10-23 19:41       ` Edgecombe, Rick P
2026-10-16 23:43 ` [PATCH RFC 00/20] attestation: Add a common subsystem and TDX support Jason Gunthorpe
2026-10-17 18:16   ` Dionna Glaze
2026-10-17 19:06     ` Jarkko Sakkinen
2026-10-17 19:08       ` Jarkko Sakkinen
2026-10-17 19:22         ` Jarkko Sakkinen
2026-10-17 20:55       ` Jason Gunthorpe
2026-10-17 21:14         ` Jarkko Sakkinen
2026-10-17 20:34     ` Jason Gunthorpe
2026-10-17 20:55       ` Jarkko Sakkinen
2026-10-17 23:10         ` Jason Gunthorpe
2026-10-18 23:53           ` Dionna Glaze
2026-10-19 12:08             ` Jiri Pirko
2026-10-19 16:10               ` Dionna Glaze
2026-10-19 22:56                 ` Jason Gunthorpe
2026-10-21  8:33                   ` Jiri Pirko
2026-10-21 14:12                     ` Mimi Zohar
2026-10-21 14:35                       ` Jason Gunthorpe
2026-10-21 19:05                         ` Mimi Zohar
2026-10-22 10:54                           ` Jiri Pirko
2026-10-22 11:24                             ` Mimi Zohar
2026-10-22 18:51                               ` Jason Gunthorpe
2026-10-22 19:19                                 ` Jarkko Sakkinen
2026-10-22 19:23                                   ` Jason Gunthorpe
2026-10-22 19:40                                     ` Jarkko Sakkinen
2026-10-22 19:40                                     ` James Bottomley
2026-10-22 12:26                         ` James Bottomley
2026-10-22 13:11                           ` Jason Gunthorpe
2026-10-22 14:07                             ` James Bottomley
2026-10-22 19:19                               ` Jason Gunthorpe
2026-10-22 19:37                                 ` Mimi Zohar
2026-10-22 19:45                                   ` Jason Gunthorpe
2026-10-22 19:52                                     ` James Bottomley
2026-10-22 20:43                                       ` Mimi Zohar
2026-10-20  9:26                 ` Jiri Pirko
2026-10-20 13:45                 ` Mimi Zohar
2026-10-20 14:06                   ` Jason Gunthorpe
2026-10-20 15:22                     ` Mimi Zohar
2026-10-20 16:11                       ` Yeoreum Yun
2026-10-20 16:52                         ` Jason Gunthorpe
2026-10-21 12:23                           ` Mimi Zohar
2026-10-21 13:18                             ` Jarkko Sakkinen
2026-10-21 13:50                               ` Yeoreum Yun
2026-10-21 13:51                             ` Jason Gunthorpe
2026-10-21 14:31                               ` Mimi Zohar
2026-10-21 14:39                                 ` Jason Gunthorpe
2026-10-21 12:48                         ` James Bottomley
2026-10-21 13:55                           ` Jason Gunthorpe
2026-10-19 12:40             ` Jarkko Sakkinen
2026-10-19 23:11             ` Jason Gunthorpe
2026-10-20 12:49       ` James Bottomley
2026-10-20 13:13         ` Jason Gunthorpe
2026-10-22 10:30 ` Aneesh Kumar K.V
2026-10-22 15:38   ` Jiri Pirko
2026-10-22 16:42     ` Jason Gunthorpe
2026-10-23  8:04     ` Aneesh Kumar K.V
2026-10-23 11:32       ` Jiri Pirko
2026-10-23 14:20       ` Jason Gunthorpe
2026-10-23 15:28         ` Aneesh Kumar K.V
2026-10-23 15:42           ` Jason Gunthorpe
2026-10-23 19:13             ` Jonathan Cameron

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=at9nsxtGOl3N5PJR@FV6GYCPJ69 \
    --to=jiri@resnulli.us \
    --cc=James.Bottomley@hansenpartnership.com \
    --cc=aik@amd.com \
    --cc=alistair.francis@wdc.com \
    --cc=ankita@nvidia.com \
    --cc=cedric.xing@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=david.quigley@intel.com \
    --cc=drdeeglaze@gmail.com \
    --cc=elena.reshetova@intel.com \
    --cc=jgg@nvidia.com \
    --cc=jgg@ziepe.ca \
    --cc=jic23@kernel.org \
    --cc=jpiotrowski@nvidia.com \
    --cc=kas@kernel.org \
    --cc=ksinyuk@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-coco@lists.linux.dev \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lukas@wunner.de \
    --cc=peter.fang@intel.com \
    --cc=pgonda@google.com \
    --cc=qinkun@google.com \
    --cc=rick.p.edgecombe@intel.com \
    --cc=rodrigo.vivi@intel.com \
    --cc=sameo@meta.com \
    --cc=sathyanarayanan.kuppuswamy@linux.intel.com \
    --cc=suzuki.poulose@arm.com \
    --cc=x86@kernel.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