@@ -318,27 +318,12 @@ static int enc_payload(struct snp_guest_dev *snp_dev, u64 seqno, int version, u8
318318 return __enc_payload (snp_dev , req , payload , sz );
319319}
320320
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 )
324322{
325323 unsigned long err , override_err = 0 ;
326324 unsigned int override_npages = 0 ;
327- u64 seqno ;
328325 int rc ;
329326
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-
342327retry_request :
343328 /*
344329 * 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
347332 * prevent reuse of the IV.
348333 */
349334 rc = snp_issue_guest_request (exit_code , & snp_dev -> input , & err );
350-
351335 switch (rc ) {
352336 case - ENOSPC :
353337 /*
@@ -401,7 +385,33 @@ static int handle_guest_request(struct snp_guest_dev *snp_dev, u64 exit_code, in
401385 if (!rc && override_err == SNP_GUEST_REQ_INVALID_LEN )
402386 return - EIO ;
403387
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 );
404411 if (rc ) {
412+ if (rc == - EIO && * fw_err == SNP_GUEST_REQ_INVALID_LEN )
413+ return rc ;
414+
405415 dev_alert (snp_dev -> dev ,
406416 "Detected error from ASP request. rc: %d, fw_err: %llu\n" ,
407417 rc , * fw_err );
0 commit comments