On Thu, Dec 07, 2023 at 02:06:37PM +0000, Conor Dooley wrote: > On Tue, Dec 05, 2023 at 07:11:23PM +0100, Andrew Jones wrote: > > > +static int sbi_sta_steal_time_set_shmem(unsigned long lo, unsigned long hi, > > + unsigned long flags) > > { > > + struct sbiret ret; > > + > > + ret = sbi_ecall(SBI_EXT_STA, SBI_EXT_STA_STEAL_TIME_SET_SHMEM, > > + lo, hi, flags, 0, 0, 0); > > + if (ret.error) { > > + if (lo == SBI_STA_SHMEM_DISABLE && hi == SBI_STA_SHMEM_DISABLE) > > + pr_warn("Failed to disable steal-time shmem"); > > + else > > + pr_warn("Failed to set steal-time shmem"); > > + return -ENOMEM; > > btw, how come this is an ENOMEM and not a propagation of the error from > the ecall? Hmm, I can't recall why I did that. I think I should have used sbi_err_map_linux_errno() to convert the possible SBI_ERR_INVALID_PARAM and SBI_ERR_INVALID_ADDRESS errors appropriately instead. I don't much like how SBI_ERR_FAILURE gets converted to ENOTSUPP, but I don't suppose it matters much in practice anyway, and at least, in this case, it has a 1-to-1 mapping which is good for debug. I'll change this for v2. Thanks, drew