On Thu, 2024-03-21 at 16:52 -0700, Isaku Yamahata wrote: > On Thu, Mar 21, 2024 at 12:09:57PM +1300, > "Huang, Kai" <kai.huang@xxxxxxxxx> wrote: > > > > Does it make sense? > > > > > > void pr_tdx_error(u64 op, u64 error_code) > > > { > > > pr_err_ratelimited("SEAMCALL (0x%016llx) failed: 0x%016llx\n", > > > op, error_code); > > > } > > > > Should we also have a _ret version? > > > > void pr_seamcall_err(u64 op, u64 err) > > { > > /* A comment to explain why using the _ratelimited() version? */ > > Because KVM can hit successive seamcall erorrs e.g. during desutructing TD, > (it's unintentional sometimes), ratelimited version is preferred as safe guard. > For example, SEAMCALL on all or some LPs (TDH_MNG_KEY_FREEID) can fail at the > same time. And the number of LPs can be hundreds. I mean you certainly have a reason to use _ratelimited() version. My point is you at least explain it in a comment. > > > > pr_err_ratelimited(...); > > } > > > > void pr_seamcall_err_ret(u64 op, u64 err, struct tdx_module_args *arg) > > { > > pr_err_seamcall(op, err); > > > > pr_err_ratelimited(...); > > } > > > > (Hmm... if you look at the tdx.c in TDX host, there's similar code there, > > and again, it was a little bit annoying when I did that..) > > > > Again, if we just use seamcall_ret() for ALL SEAMCALLs except VP.ENTER, we > > can simply have one.. > > What about this? > > void pr_seamcall_err_ret(u64 op, u64 err, struct tdx_module_args *arg) > { > pr_err_ratelimited("SEAMCALL (0x%016llx) failed: 0x%016llx\n", > op, error_code); > if (arg) > pr_err_ratelimited(...); > } > Fine to me. Or call pr_seamcall_err() instead. I don't care too much.