Messages in this thread | | | Date | Mon, 3 Apr 2023 14:13:25 -0500 | Subject | Re: [PATCH v2 02/11] virt: sev-guest: Move mutex to SNP guest device structure | From | Tom Lendacky <> |
| |
On 3/26/23 09:46, Nikunj A Dadhania wrote: > In preparation to provide new API for sending SNP guest message to the > sev-guest driver, move the SNP command mutex to the snp_guest_dev > structure.
In preparation for providing a new API to the sev-guest driver for sending an SNP guest message, ...
> > Signed-off-by: Nikunj A Dadhania <nikunj@amd.com>
Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
> --- > drivers/virt/coco/sev-guest/sev-guest.c | 21 +++++++++++---------- > 1 file changed, 11 insertions(+), 10 deletions(-) > > diff --git a/drivers/virt/coco/sev-guest/sev-guest.c b/drivers/virt/coco/sev-guest/sev-guest.c > index 57af908bafba..6ae197b57644 100644 > --- a/drivers/virt/coco/sev-guest/sev-guest.c > +++ b/drivers/virt/coco/sev-guest/sev-guest.c > @@ -35,6 +35,9 @@ struct snp_guest_dev { > struct device *dev; > struct miscdevice misc; > > + /* Mutex to serialize the shared buffer access and command handling. */ > + struct mutex cmd_mutex; > + > void *certs_data; > struct aesgcm_ctx *ctx; > struct snp_guest_msg *request, *response; > @@ -48,9 +51,6 @@ static u32 vmpck_id; > module_param(vmpck_id, uint, 0444); > MODULE_PARM_DESC(vmpck_id, "The VMPCK ID to use when communicating with the PSP."); > > -/* Mutex to serialize the shared buffer access and command handling. */ > -static DEFINE_MUTEX(snp_cmd_mutex); > - > static inline unsigned int get_ctx_authsize(struct snp_guest_dev *snp_dev) > { > if (snp_dev && snp_dev->ctx) > @@ -99,7 +99,7 @@ static inline u64 __snp_get_msg_seqno(struct snp_guest_dev *snp_dev) > { > u64 count; > > - lockdep_assert_held(&snp_cmd_mutex); > + lockdep_assert_held(&snp_dev->cmd_mutex); > > /* Read the current message sequence counter from secrets pages */ > count = *snp_dev->os_area_msg_seqno; > @@ -377,7 +377,7 @@ static int get_report(struct snp_guest_dev *snp_dev, struct snp_guest_request_io > struct snp_report_req req; > int rc, resp_len; > > - lockdep_assert_held(&snp_cmd_mutex); > + lockdep_assert_held(&snp_dev->cmd_mutex); > > if (!arg->req_data || !arg->resp_data) > return -EINVAL; > @@ -417,7 +417,7 @@ static int get_derived_key(struct snp_guest_dev *snp_dev, struct snp_guest_reque > /* Response data is 64 bytes and max authsize for GCM is 16 bytes. */ > u8 buf[64 + 16]; > > - lockdep_assert_held(&snp_cmd_mutex); > + lockdep_assert_held(&snp_dev->cmd_mutex); > > if (!arg->req_data || !arg->resp_data) > return -EINVAL; > @@ -456,7 +456,7 @@ static int get_ext_report(struct snp_guest_dev *snp_dev, struct snp_guest_reques > struct snp_report_resp *resp; > int ret, npages = 0, resp_len; > > - lockdep_assert_held(&snp_cmd_mutex); > + lockdep_assert_held(&snp_dev->cmd_mutex); > > if (!arg->req_data || !arg->resp_data) > return -EINVAL; > @@ -541,12 +541,12 @@ static long snp_guest_ioctl(struct file *file, unsigned int ioctl, unsigned long > if (!input.msg_version) > return -EINVAL; > > - mutex_lock(&snp_cmd_mutex); > + mutex_lock(&snp_dev->cmd_mutex); > > /* Check if the VMPCK is not empty */ > if (is_vmpck_empty(snp_dev)) { > dev_err_ratelimited(snp_dev->dev, "VMPCK is disabled\n"); > - mutex_unlock(&snp_cmd_mutex); > + mutex_unlock(&snp_dev->cmd_mutex); > return -ENOTTY; > } > > @@ -564,7 +564,7 @@ static long snp_guest_ioctl(struct file *file, unsigned int ioctl, unsigned long > break; > } > > - mutex_unlock(&snp_cmd_mutex); > + mutex_unlock(&snp_dev->cmd_mutex); > > if (input.fw_err && copy_to_user(argp, &input, sizeof(input))) > return -EFAULT; > @@ -683,6 +683,7 @@ static int __init sev_guest_probe(struct platform_device *pdev) > goto e_unmap; > } > > + mutex_init(&snp_dev->cmd_mutex); > platform_set_drvdata(pdev, snp_dev); > snp_dev->dev = dev; > snp_dev->layout = layout;
| |