@@ -318,27 +318,12 @@ static int enc_payload(struct snp_guest_dev *snp_dev, u64 seqno, int version, u8
318
318
return __enc_payload (snp_dev , req , payload , sz );
319
319
}
320
320
321
- static int handle_guest_request (struct snp_guest_dev * snp_dev , u64 exit_code , int msg_ver ,
322
- u8 type , void * req_buf , size_t req_sz , void * resp_buf ,
323
- u32 resp_sz , __u64 * fw_err )
321
+ static int __handle_guest_request (struct snp_guest_dev * snp_dev , u64 exit_code , __u64 * fw_err )
324
322
{
325
323
unsigned long err , override_err = 0 ;
326
324
unsigned int override_npages = 0 ;
327
- u64 seqno ;
328
325
int rc ;
329
326
330
- /* Get message sequence and verify that its a non-zero */
331
- seqno = snp_get_msg_seqno (snp_dev );
332
- if (!seqno )
333
- return - EIO ;
334
-
335
- memset (snp_dev -> response , 0 , sizeof (struct snp_guest_msg ));
336
-
337
- /* Encrypt the userspace provided payload */
338
- rc = enc_payload (snp_dev , seqno , msg_ver , type , req_buf , req_sz );
339
- if (rc )
340
- return rc ;
341
-
342
327
retry_request :
343
328
/*
344
329
* Call firmware to process the request. In this function the encrypted
@@ -347,7 +332,6 @@ static int handle_guest_request(struct snp_guest_dev *snp_dev, u64 exit_code, in
347
332
* prevent reuse of the IV.
348
333
*/
349
334
rc = snp_issue_guest_request (exit_code , & snp_dev -> input , & err );
350
-
351
335
switch (rc ) {
352
336
case - ENOSPC :
353
337
/*
@@ -401,7 +385,33 @@ static int handle_guest_request(struct snp_guest_dev *snp_dev, u64 exit_code, in
401
385
if (!rc && override_err == SNP_GUEST_REQ_INVALID_LEN )
402
386
return - EIO ;
403
387
388
+ return rc ;
389
+ }
390
+
391
+ static int handle_guest_request (struct snp_guest_dev * snp_dev , u64 exit_code , int msg_ver ,
392
+ u8 type , void * req_buf , size_t req_sz , void * resp_buf ,
393
+ u32 resp_sz , __u64 * fw_err )
394
+ {
395
+ u64 seqno ;
396
+ int rc ;
397
+
398
+ /* Get message sequence and verify that its a non-zero */
399
+ seqno = snp_get_msg_seqno (snp_dev );
400
+ if (!seqno )
401
+ return - EIO ;
402
+
403
+ memset (snp_dev -> response , 0 , sizeof (struct snp_guest_msg ));
404
+
405
+ /* Encrypt the userspace provided payload */
406
+ rc = enc_payload (snp_dev , seqno , msg_ver , type , req_buf , req_sz );
407
+ if (rc )
408
+ return rc ;
409
+
410
+ rc = __handle_guest_request (snp_dev , exit_code , fw_err );
404
411
if (rc ) {
412
+ if (rc == - EIO && * fw_err == SNP_GUEST_REQ_INVALID_LEN )
413
+ return rc ;
414
+
405
415
dev_alert (snp_dev -> dev ,
406
416
"Detected error from ASP request. rc: %d, fw_err: %llu\n" ,
407
417
rc , * fw_err );
0 commit comments