Re: [PATCH v3 03/18] nitro_enclaves: Define enclave info for internal bookkeeping

2020-05-26 Thread Paraschiv, Andra-Irina



On 26/05/2020 09:46, Greg KH wrote:

On Tue, May 26, 2020 at 01:13:19AM +0300, Andra Paraschiv wrote:

+/* Nitro Enclaves (NE) misc device */
+extern struct miscdevice ne_miscdevice;

Why does your misc device need to be in a .h file?

Having the patch series like this (add random .h files, and then start
to use them), is hard to review.  Would you want to try to review a
series written in this way?


The misc device is registered / unregistered while having the NE PCI 
device probe / remove, as a dependency to actually having a PCI device 
working to expose a misc device.


The way the codebase is split in files is mainly the ioctl logic / misc 
device in one file and the PCI device logic in another file; thus not 
have all the codebase in a single big file. Given the misc device 
(un)register logic above, the misc device needs to be available to the 
PCI device setup logic.


Andra




Amazon Development Center (Romania) S.R.L. registered office: 27A Sf. Lazar 
Street, UBC5, floor 2, Iasi, Iasi County, 700045, Romania. Registered in 
Romania. Registration number J22/2621/2005.


Re: [PATCH v3 03/18] nitro_enclaves: Define enclave info for internal bookkeeping

2020-05-26 Thread Greg KH
On Tue, May 26, 2020 at 01:13:19AM +0300, Andra Paraschiv wrote:
> +/* Nitro Enclaves (NE) misc device */
> +extern struct miscdevice ne_miscdevice;

Why does your misc device need to be in a .h file?

Having the patch series like this (add random .h files, and then start
to use them), is hard to review.  Would you want to try to review a
series written in this way?

thanks,

greg k-h


[PATCH v3 03/18] nitro_enclaves: Define enclave info for internal bookkeeping

2020-05-25 Thread Andra Paraschiv
The Nitro Enclaves driver keeps an internal info per each enclave.

This is needed to be able to manage enclave resources state, enclave
notifications and have a reference of the PCI device that handles
command requests for enclave lifetime management.

Signed-off-by: Alexandru-Catalin Vasile 
Signed-off-by: Andra Paraschiv 
---
Changelog

v2 -> v3

* Remove the GPL additional wording as SPDX-License-Identifier is already in
place.

v1 -> v2

* Add enclave memory regions and vcpus count for enclave bookkeeping.
* Update ne_state comments to reflect NE_START_ENCLAVE ioctl naming update.
---
 drivers/virt/nitro_enclaves/ne_misc_dev.h | 109 ++
 1 file changed, 109 insertions(+)
 create mode 100644 drivers/virt/nitro_enclaves/ne_misc_dev.h

diff --git a/drivers/virt/nitro_enclaves/ne_misc_dev.h 
b/drivers/virt/nitro_enclaves/ne_misc_dev.h
new file mode 100644
index ..6f1db85fc741
--- /dev/null
+++ b/drivers/virt/nitro_enclaves/ne_misc_dev.h
@@ -0,0 +1,109 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ */
+
+#ifndef _NE_MISC_DEV_H_
+#define _NE_MISC_DEV_H_
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+/* Entry in vCPU IDs list. */
+struct ne_vcpu_id {
+   /* CPU id associated with a given slot, apic id on x86. */
+   u32 vcpu_id;
+
+   struct list_head vcpu_id_list_entry;
+};
+
+/* Entry in memory regions list. */
+struct ne_mem_region {
+   struct list_head mem_region_list_entry;
+
+   /* Number of pages that make up the memory region. */
+   unsigned long nr_pages;
+
+   /* Pages that make up the user space memory region. */
+   struct page **pages;
+};
+
+/* Per-enclave data used for enclave lifetime management. */
+struct ne_enclave {
+   /**
+* CPU pool with siblings of already allocated CPUs to an enclave.
+* This is used when a CPU pool is set, to be able to know the CPU
+* siblings for the hyperthreading (HT) setup.
+*/
+   cpumask_var_t cpu_siblings;
+
+   struct list_head enclave_list_entry;
+
+   /* Mutex for accessing this internal state. */
+   struct mutex enclave_info_mutex;
+
+   /**
+* Wait queue used for out-of-band event notifications
+* triggered from the PCI device event handler to the enclave
+* process via the poll function.
+*/
+   wait_queue_head_t eventq;
+
+   /* Variable used to determine if the out-of-band event was triggered. */
+   bool has_event;
+
+   /**
+* The maximum number of memory regions that can be handled by the
+* lower levels.
+*/
+   u64 max_mem_regions;
+
+   /* Enclave memory regions list. */
+   struct list_head mem_regions_list;
+
+   /* Enclave process abstraction mm data struct. */
+   struct mm_struct *mm;
+
+   /* Number of memory regions associated with the enclave. */
+   u64 nr_mem_regions;
+
+   /* Number of vcpus associated with the enclave. */
+   u64 nr_vcpus;
+
+   /* PCI device used for enclave lifetime management. */
+   struct pci_dev *pdev;
+
+   /* Slot unique id mapped to the enclave. */
+   u64 slot_uid;
+
+   /* Enclave state, updated during enclave lifetime. */
+   u16 state;
+
+   /* Enclave vCPUs list. */
+   struct list_head vcpu_ids_list;
+};
+
+/* States available for an enclave. */
+enum ne_state {
+   /* NE_START_ENCLAVE ioctl was never issued for the enclave. */
+   NE_STATE_INIT = 0,
+
+   /**
+* NE_START_ENCLAVE ioctl was issued and the enclave is running
+* as expected.
+*/
+   NE_STATE_RUNNING = 2,
+
+   /* Enclave exited without userspace interaction. */
+   NE_STATE_STOPPED = U16_MAX,
+};
+
+/* Nitro Enclaves (NE) misc device */
+extern struct miscdevice ne_miscdevice;
+
+#endif /* _NE_MISC_DEV_H_ */
-- 
2.20.1 (Apple Git-117)




Amazon Development Center (Romania) S.R.L. registered office: 27A Sf. Lazar 
Street, UBC5, floor 2, Iasi, Iasi County, 700045, Romania. Registered in 
Romania. Registration number J22/2621/2005.