From: Alexander Graf <graf@amazon.de>
To: "Paraschiv, Andra-Irina" <andraprs@amazon.com>,
Greg KH <gregkh@linuxfoundation.org>
Cc: <linux-kernel@vger.kernel.org>,
Anthony Liguori <aliguori@amazon.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Colm MacCarthaigh <colmmacc@amazon.com>,
David Duncan <davdunc@amazon.com>,
Bjoern Doebel <doebel@amazon.de>,
David Woodhouse <dwmw@amazon.co.uk>,
Frank van der Linden <fllinden@amazon.com>,
Karen Noel <knoel@redhat.com>,
Martin Pohlack <mpohlack@amazon.de>, Matt Wilson <msw@amazon.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Balbir Singh <sblbir@amazon.com>,
Stefano Garzarella <sgarzare@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Stewart Smith <trawets@amazon.com>,
Uwe Dannowski <uwed@amazon.de>,
Vitaly Kuznetsov <vkuznets@redhat.com>, <kvm@vger.kernel.org>,
<ne-devel-upstream@amazon.com>, Alexander Graf <graf@amazon.com>
Subject: Re: [PATCH v5 01/18] nitro_enclaves: Add ioctl interface definition
Date: Fri, 24 Jul 2020 01:04:39 +0200 [thread overview]
Message-ID: <a085bf17-8f83-5946-0f79-97230616b4b3@amazon.de> (raw)
In-Reply-To: <dd99213b-3caf-4fc0-1bf5-314297e3d450@amazon.com>
On 23.07.20 20:21, Paraschiv, Andra-Irina wrote:
>
>
> On 23/07/2020 13:54, Greg KH wrote:
>> On Thu, Jul 23, 2020 at 12:23:56PM +0300, Paraschiv, Andra-Irina wrote:
>>>
>>> On 22/07/2020 12:57, Greg KH wrote:
>>>> On Wed, Jul 22, 2020 at 11:27:29AM +0300, Paraschiv, Andra-Irina wrote:
>>>>>>> +#ifndef _UAPI_LINUX_NITRO_ENCLAVES_H_
>>>>>>> +#define _UAPI_LINUX_NITRO_ENCLAVES_H_
>>>>>>> +
>>>>>>> +#include <linux/types.h>
>>>>>>> +
>>>>>>> +/* Nitro Enclaves (NE) Kernel Driver Interface */
>>>>>>> +
>>>>>>> +#define NE_API_VERSION (1)
>>>>>> Why do you need this version? It shouldn't be needed, right?
>>>>> The version is used as a way for the user space tooling to sync on the
>>>>> features set provided by the driver e.g. in case an older version
>>>>> of the
>>>>> driver is available on the system and the user space tooling
>>>>> expects a set
>>>>> of features that is not included in that driver version.
>>>> That is guaranteed to get out of sync instantly with different distro
>>>> kernels backporting random things, combined with stable kernel patch
>>>> updates and the like.
>>>>
>>>> Just use the normal api interfaces instead, don't try to "version"
>>>> anything, it will not work, trust us :)
>>>>
>>>> If an ioctl returns -ENOTTY then hey, it's not present and your
>>>> userspace code can handle it that way.
>>> Correct, there could be a variety of kernel versions and user space
>>> tooling
>>> either in the original form, customized or written from scratch. And
>>> ENOTTY
>>> signals an ioctl not available or e.g. EINVAL (or custom error) if the
>>> parameter field value is not valid within a certain version. We have
>>> these
>>> in place, that's good. :)
>>>
>>> However, I was thinking, for example, of an ioctl flow usage where a
>>> certain
>>> order needs to be followed e.g. create a VM, add resources to a VM,
>>> start a
>>> VM.
>>>
>>> Let's say, for an use case wrt new features, ioctl A (create a VM)
>>> succeeds,
>>> ioctl B (add memory to the VM) succeeds, ioctl C (add CPU to the VM)
>>> succeeds and ioctl D (add any other type of resource before starting
>>> the VM)
>>> fails because it is not supported.
>>>
>>> Would not need to call ioctl A to C and go through their underneath
>>> logic to
>>> realize ioctl D support is not there and rollback all the changes
>>> done till
>>> then within ioctl A to C logic. Of course, there could be ioctl A
>>> followed
>>> by ioctl D, and would need to rollback ioctl A changes, but I shared
>>> a more
>>> lengthy call chain that can be an option as well.
>> I think you are overthinking this.
>>
>> If your interface is this complex, you have much larger issues as you
>> ALWAYS have to be able to handle error conditions properly, even if the
>> API is "supported".
>
> True, the error paths need to handled correctly on the kernel driver and
> on the user space logic side, independent of supported features or not.
> Cannot assume that all ioctl callers are behaving correctly or there are
> no errors in the system.
>
> What I wanted to cover with that example is more towards the user space
> logic using new features, either early exiting before even trying the
> ioctl call flow path or going through part of the flow till getting the
> error e.g. ENOTTY for one of the ioctl calls.
If we need an API to query for new features, we can add it once we add
new features, no? The absence of the query API will indicate that no
additional features are available.
So yes, sorry, oversight on my side :(. I agree with Greg: there really
is no need for a version query API as of today.
>
>>
>> Perhaps your API is showing to be too complex?
>>
>> Also, where is the userspace code for all of this? Did I miss a link to
>> it in the patches somewhere?
>
> Nope, you didn't miss any references to it. The codebase for the user
> space code is not publicly available for now, but it will be available
> on GitHub once the whole project is GA. And I'll include the refs, once
> available, in the NE kernel driver documentation.
Patch 16/18 contains an example user space to drive the ioctl interface.
The code base Andra is referring to above is going to be a more complete
framework to drive Nitro Enclaves that also consumes this kernel API.
Alex
Amazon Development Center Germany GmbH
Krausenstr. 38
10117 Berlin
Geschaeftsfuehrung: Christian Schlaeger, Jonathan Weiss
Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B
Sitz: Berlin
Ust-ID: DE 289 237 879
next prev parent reply other threads:[~2020-07-23 23:04 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-15 19:45 [PATCH v5 00/18] Add support for Nitro Enclaves Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 01/18] nitro_enclaves: Add ioctl interface definition Andra Paraschiv
2020-07-16 8:30 ` Stefan Hajnoczi
2020-07-16 9:30 ` Paraschiv, Andra-Irina
2020-07-21 12:12 ` Greg KH
2020-07-22 8:27 ` Paraschiv, Andra-Irina
2020-07-22 9:57 ` Greg KH
2020-07-23 9:23 ` Paraschiv, Andra-Irina
2020-07-23 10:54 ` Greg KH
2020-07-23 18:21 ` Paraschiv, Andra-Irina
2020-07-23 23:04 ` Alexander Graf [this message]
2020-07-24 9:06 ` Paraschiv, Andra-Irina
2020-07-15 19:45 ` [PATCH v5 02/18] nitro_enclaves: Define the PCI device interface Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 03/18] nitro_enclaves: Define enclave info for internal bookkeeping Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 04/18] nitro_enclaves: Init PCI device driver Andra Paraschiv
2020-07-20 14:24 ` Alexander Graf
2020-07-21 6:20 ` Paraschiv, Andra-Irina
2020-07-15 19:45 ` [PATCH v5 05/18] nitro_enclaves: Handle PCI device command requests Andra Paraschiv
2020-07-21 10:17 ` Alexander Graf
2020-07-22 8:14 ` Paraschiv, Andra-Irina
2020-07-15 19:45 ` [PATCH v5 06/18] nitro_enclaves: Handle out-of-band PCI device events Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 07/18] nitro_enclaves: Init misc device providing the ioctl interface Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 08/18] nitro_enclaves: Add logic for creating an enclave VM Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 09/18] nitro_enclaves: Add logic for setting an enclave vCPU Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 10/18] nitro_enclaves: Add logic for getting the enclave image load info Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 11/18] nitro_enclaves: Add logic for setting an enclave memory region Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 12/18] nitro_enclaves: Add logic for starting an enclave Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 13/18] nitro_enclaves: Add logic for terminating " Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 14/18] nitro_enclaves: Add Kconfig for the Nitro Enclaves driver Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 15/18] nitro_enclaves: Add Makefile " Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 16/18] nitro_enclaves: Add sample for ioctl interface usage Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 17/18] nitro_enclaves: Add overview documentation Andra Paraschiv
2020-07-15 19:45 ` [PATCH v5 18/18] MAINTAINERS: Add entry for the Nitro Enclaves driver Andra Paraschiv
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=a085bf17-8f83-5946-0f79-97230616b4b3@amazon.de \
--to=graf@amazon.de \
--cc=aliguori@amazon.com \
--cc=andraprs@amazon.com \
--cc=benh@kernel.crashing.org \
--cc=colmmacc@amazon.com \
--cc=davdunc@amazon.com \
--cc=doebel@amazon.de \
--cc=dwmw@amazon.co.uk \
--cc=fllinden@amazon.com \
--cc=graf@amazon.com \
--cc=gregkh@linuxfoundation.org \
--cc=knoel@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mpohlack@amazon.de \
--cc=msw@amazon.com \
--cc=ne-devel-upstream@amazon.com \
--cc=pbonzini@redhat.com \
--cc=sblbir@amazon.com \
--cc=sgarzare@redhat.com \
--cc=stefanha@redhat.com \
--cc=trawets@amazon.com \
--cc=uwed@amazon.de \
--cc=vkuznets@redhat.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
all inboxes | Powered by JetHome®