From: Vitaly Kuznetsov <vkuznets@redhat.com> To: Nuno Das Neves <nunodasneves@linux.microsoft.com>, linux-hyperv@vger.kernel.org Cc: virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org, mikelley@microsoft.com, viremana@linux.microsoft.com, sunilmut@microsoft.com, nunodasneves@linux.microsoft.com, wei.liu@kernel.org, ligrassi@microsoft.com, kys@microsoft.com Subject: Re: [RFC PATCH 01/18] x86/hyperv: convert hyperv statuses to linux error codes Date: Tue, 09 Feb 2021 14:04:27 +0100 [thread overview] Message-ID: <871rdpo0is.fsf@vitty.brq.redhat.com> (raw) In-Reply-To: <1605918637-12192-2-git-send-email-nunodasneves@linux.microsoft.com> Nuno Das Neves <nunodasneves@linux.microsoft.com> writes: > Return linux-friendly error codes from hypercall wrapper functions. > This will be needed in the mshv module. > > Signed-off-by: Nuno Das Neves <nunodasneves@linux.microsoft.com> > --- > arch/x86/hyperv/hv_proc.c | 30 ++++++++++++++++++++++++++--- > arch/x86/include/asm/mshyperv.h | 1 + > include/asm-generic/hyperv-tlfs.h | 32 +++++++++++++++++++++---------- > 3 files changed, 50 insertions(+), 13 deletions(-) > > diff --git a/arch/x86/hyperv/hv_proc.c b/arch/x86/hyperv/hv_proc.c > index 0fd972c9129a..8f86f8e86748 100644 > --- a/arch/x86/hyperv/hv_proc.c > +++ b/arch/x86/hyperv/hv_proc.c > @@ -18,6 +18,30 @@ > #define HV_DEPOSIT_MAX_ORDER (8) > #define HV_DEPOSIT_MAX (1 << HV_DEPOSIT_MAX_ORDER) > > +int hv_status_to_errno(int hv_status) > +{ > + switch (hv_status) { > + case HV_STATUS_SUCCESS: > + return 0; > + case HV_STATUS_INVALID_PARAMETER: > + case HV_STATUS_UNKNOWN_PROPERTY: > + case HV_STATUS_PROPERTY_VALUE_OUT_OF_RANGE: > + case HV_STATUS_INVALID_VP_INDEX: > + case HV_STATUS_INVALID_REGISTER_VALUE: > + case HV_STATUS_INVALID_LP_INDEX: > + return EINVAL; > + case HV_STATUS_ACCESS_DENIED: > + case HV_STATUS_OPERATION_DENIED: > + return EACCES; > + case HV_STATUS_NOT_ACKNOWLEDGED: > + case HV_STATUS_INVALID_VP_STATE: > + case HV_STATUS_INVALID_PARTITION_STATE: > + return EBADFD; > + } > + return ENOTRECOVERABLE; > +} > +EXPORT_SYMBOL_GPL(hv_status_to_errno); > + > /* > * Deposits exact number of pages > * Must be called with interrupts enabled > @@ -99,7 +123,7 @@ int hv_call_deposit_pages(int node, u64 partition_id, u32 num_pages) > > if (status != HV_STATUS_SUCCESS) { > pr_err("Failed to deposit pages: %d\n", status); > - ret = status; > + ret = -hv_status_to_errno(status); "-hv_status_to_errno" looks weird, could we just return '-EINVAL'/'-EACCES'/... from hv_status_to_errno() instead? > goto err_free_allocations; > } > > @@ -155,7 +179,7 @@ int hv_call_add_logical_proc(int node, u32 lp_index, u32 apic_id) > if (status != HV_STATUS_SUCCESS) { > pr_err("%s: cpu %u apic ID %u, %d\n", __func__, > lp_index, apic_id, status); > - ret = status; > + ret = -hv_status_to_errno(status); > } > break; > } > @@ -203,7 +227,7 @@ int hv_call_create_vp(int node, u64 partition_id, u32 vp_index, u32 flags) > if (status != HV_STATUS_SUCCESS) { > pr_err("%s: vcpu %u, lp %u, %d\n", __func__, > vp_index, flags, status); > - ret = status; > + ret = -hv_status_to_errno(status); > } > break; > } > diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h > index cbee72550a12..eb75faa4d4c5 100644 > --- a/arch/x86/include/asm/mshyperv.h > +++ b/arch/x86/include/asm/mshyperv.h > @@ -243,6 +243,7 @@ int hyperv_flush_guest_mapping_range(u64 as, > int hyperv_fill_flush_guest_mapping_list( > struct hv_guest_mapping_flush_list *flush, > u64 start_gfn, u64 end_gfn); > +int hv_status_to_errno(int hv_status); > > extern bool hv_root_partition; > > diff --git a/include/asm-generic/hyperv-tlfs.h b/include/asm-generic/hyperv-tlfs.h > index dd385c6a71b5..445244192fa4 100644 > --- a/include/asm-generic/hyperv-tlfs.h > +++ b/include/asm-generic/hyperv-tlfs.h > @@ -181,16 +181,28 @@ enum HV_GENERIC_SET_FORMAT { > #define HV_HYPERCALL_REP_START_MASK GENMASK_ULL(59, 48) > > /* hypercall status code */ > -#define HV_STATUS_SUCCESS 0 > -#define HV_STATUS_INVALID_HYPERCALL_CODE 2 > -#define HV_STATUS_INVALID_HYPERCALL_INPUT 3 > -#define HV_STATUS_INVALID_ALIGNMENT 4 > -#define HV_STATUS_INVALID_PARAMETER 5 > -#define HV_STATUS_OPERATION_DENIED 8 > -#define HV_STATUS_INSUFFICIENT_MEMORY 11 > -#define HV_STATUS_INVALID_PORT_ID 17 > -#define HV_STATUS_INVALID_CONNECTION_ID 18 > -#define HV_STATUS_INSUFFICIENT_BUFFERS 19 > +#define HV_STATUS_SUCCESS 0x0 > +#define HV_STATUS_INVALID_HYPERCALL_CODE 0x2 > +#define HV_STATUS_INVALID_HYPERCALL_INPUT 0x3 > +#define HV_STATUS_INVALID_ALIGNMENT 0x4 > +#define HV_STATUS_INVALID_PARAMETER 0x5 > +#define HV_STATUS_ACCESS_DENIED 0x6 > +#define HV_STATUS_INVALID_PARTITION_STATE 0x7 > +#define HV_STATUS_OPERATION_DENIED 0x8 > +#define HV_STATUS_UNKNOWN_PROPERTY 0x9 > +#define HV_STATUS_PROPERTY_VALUE_OUT_OF_RANGE 0xA > +#define HV_STATUS_INSUFFICIENT_MEMORY 0xB > +#define HV_STATUS_INVALID_PARTITION_ID 0xD > +#define HV_STATUS_INVALID_VP_INDEX 0xE > +#define HV_STATUS_NOT_FOUND 0x10 > +#define HV_STATUS_INVALID_PORT_ID 0x11 > +#define HV_STATUS_INVALID_CONNECTION_ID 0x12 > +#define HV_STATUS_INSUFFICIENT_BUFFERS 0x13 > +#define HV_STATUS_NOT_ACKNOWLEDGED 0x14 > +#define HV_STATUS_INVALID_VP_STATE 0x15 > +#define HV_STATUS_NO_RESOURCES 0x1D > +#define HV_STATUS_INVALID_LP_INDEX 0x41 > +#define HV_STATUS_INVALID_REGISTER_VALUE 0x50 > > /* > * The Hyper-V TimeRefCount register and the TSC -- Vitaly
WARNING: multiple messages have this Message-ID (diff)
From: Vitaly Kuznetsov <vkuznets@redhat.com> To: Nuno Das Neves <nunodasneves@linux.microsoft.com>, linux-hyperv@vger.kernel.org Cc: wei.liu@kernel.org, linux-kernel@vger.kernel.org, mikelley@microsoft.com, nunodasneves@linux.microsoft.com, sunilmut@microsoft.com, virtualization@lists.linux-foundation.org, viremana@linux.microsoft.com, ligrassi@microsoft.com Subject: Re: [RFC PATCH 01/18] x86/hyperv: convert hyperv statuses to linux error codes Date: Tue, 09 Feb 2021 14:04:27 +0100 [thread overview] Message-ID: <871rdpo0is.fsf@vitty.brq.redhat.com> (raw) In-Reply-To: <1605918637-12192-2-git-send-email-nunodasneves@linux.microsoft.com> Nuno Das Neves <nunodasneves@linux.microsoft.com> writes: > Return linux-friendly error codes from hypercall wrapper functions. > This will be needed in the mshv module. > > Signed-off-by: Nuno Das Neves <nunodasneves@linux.microsoft.com> > --- > arch/x86/hyperv/hv_proc.c | 30 ++++++++++++++++++++++++++--- > arch/x86/include/asm/mshyperv.h | 1 + > include/asm-generic/hyperv-tlfs.h | 32 +++++++++++++++++++++---------- > 3 files changed, 50 insertions(+), 13 deletions(-) > > diff --git a/arch/x86/hyperv/hv_proc.c b/arch/x86/hyperv/hv_proc.c > index 0fd972c9129a..8f86f8e86748 100644 > --- a/arch/x86/hyperv/hv_proc.c > +++ b/arch/x86/hyperv/hv_proc.c > @@ -18,6 +18,30 @@ > #define HV_DEPOSIT_MAX_ORDER (8) > #define HV_DEPOSIT_MAX (1 << HV_DEPOSIT_MAX_ORDER) > > +int hv_status_to_errno(int hv_status) > +{ > + switch (hv_status) { > + case HV_STATUS_SUCCESS: > + return 0; > + case HV_STATUS_INVALID_PARAMETER: > + case HV_STATUS_UNKNOWN_PROPERTY: > + case HV_STATUS_PROPERTY_VALUE_OUT_OF_RANGE: > + case HV_STATUS_INVALID_VP_INDEX: > + case HV_STATUS_INVALID_REGISTER_VALUE: > + case HV_STATUS_INVALID_LP_INDEX: > + return EINVAL; > + case HV_STATUS_ACCESS_DENIED: > + case HV_STATUS_OPERATION_DENIED: > + return EACCES; > + case HV_STATUS_NOT_ACKNOWLEDGED: > + case HV_STATUS_INVALID_VP_STATE: > + case HV_STATUS_INVALID_PARTITION_STATE: > + return EBADFD; > + } > + return ENOTRECOVERABLE; > +} > +EXPORT_SYMBOL_GPL(hv_status_to_errno); > + > /* > * Deposits exact number of pages > * Must be called with interrupts enabled > @@ -99,7 +123,7 @@ int hv_call_deposit_pages(int node, u64 partition_id, u32 num_pages) > > if (status != HV_STATUS_SUCCESS) { > pr_err("Failed to deposit pages: %d\n", status); > - ret = status; > + ret = -hv_status_to_errno(status); "-hv_status_to_errno" looks weird, could we just return '-EINVAL'/'-EACCES'/... from hv_status_to_errno() instead? > goto err_free_allocations; > } > > @@ -155,7 +179,7 @@ int hv_call_add_logical_proc(int node, u32 lp_index, u32 apic_id) > if (status != HV_STATUS_SUCCESS) { > pr_err("%s: cpu %u apic ID %u, %d\n", __func__, > lp_index, apic_id, status); > - ret = status; > + ret = -hv_status_to_errno(status); > } > break; > } > @@ -203,7 +227,7 @@ int hv_call_create_vp(int node, u64 partition_id, u32 vp_index, u32 flags) > if (status != HV_STATUS_SUCCESS) { > pr_err("%s: vcpu %u, lp %u, %d\n", __func__, > vp_index, flags, status); > - ret = status; > + ret = -hv_status_to_errno(status); > } > break; > } > diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h > index cbee72550a12..eb75faa4d4c5 100644 > --- a/arch/x86/include/asm/mshyperv.h > +++ b/arch/x86/include/asm/mshyperv.h > @@ -243,6 +243,7 @@ int hyperv_flush_guest_mapping_range(u64 as, > int hyperv_fill_flush_guest_mapping_list( > struct hv_guest_mapping_flush_list *flush, > u64 start_gfn, u64 end_gfn); > +int hv_status_to_errno(int hv_status); > > extern bool hv_root_partition; > > diff --git a/include/asm-generic/hyperv-tlfs.h b/include/asm-generic/hyperv-tlfs.h > index dd385c6a71b5..445244192fa4 100644 > --- a/include/asm-generic/hyperv-tlfs.h > +++ b/include/asm-generic/hyperv-tlfs.h > @@ -181,16 +181,28 @@ enum HV_GENERIC_SET_FORMAT { > #define HV_HYPERCALL_REP_START_MASK GENMASK_ULL(59, 48) > > /* hypercall status code */ > -#define HV_STATUS_SUCCESS 0 > -#define HV_STATUS_INVALID_HYPERCALL_CODE 2 > -#define HV_STATUS_INVALID_HYPERCALL_INPUT 3 > -#define HV_STATUS_INVALID_ALIGNMENT 4 > -#define HV_STATUS_INVALID_PARAMETER 5 > -#define HV_STATUS_OPERATION_DENIED 8 > -#define HV_STATUS_INSUFFICIENT_MEMORY 11 > -#define HV_STATUS_INVALID_PORT_ID 17 > -#define HV_STATUS_INVALID_CONNECTION_ID 18 > -#define HV_STATUS_INSUFFICIENT_BUFFERS 19 > +#define HV_STATUS_SUCCESS 0x0 > +#define HV_STATUS_INVALID_HYPERCALL_CODE 0x2 > +#define HV_STATUS_INVALID_HYPERCALL_INPUT 0x3 > +#define HV_STATUS_INVALID_ALIGNMENT 0x4 > +#define HV_STATUS_INVALID_PARAMETER 0x5 > +#define HV_STATUS_ACCESS_DENIED 0x6 > +#define HV_STATUS_INVALID_PARTITION_STATE 0x7 > +#define HV_STATUS_OPERATION_DENIED 0x8 > +#define HV_STATUS_UNKNOWN_PROPERTY 0x9 > +#define HV_STATUS_PROPERTY_VALUE_OUT_OF_RANGE 0xA > +#define HV_STATUS_INSUFFICIENT_MEMORY 0xB > +#define HV_STATUS_INVALID_PARTITION_ID 0xD > +#define HV_STATUS_INVALID_VP_INDEX 0xE > +#define HV_STATUS_NOT_FOUND 0x10 > +#define HV_STATUS_INVALID_PORT_ID 0x11 > +#define HV_STATUS_INVALID_CONNECTION_ID 0x12 > +#define HV_STATUS_INSUFFICIENT_BUFFERS 0x13 > +#define HV_STATUS_NOT_ACKNOWLEDGED 0x14 > +#define HV_STATUS_INVALID_VP_STATE 0x15 > +#define HV_STATUS_NO_RESOURCES 0x1D > +#define HV_STATUS_INVALID_LP_INDEX 0x41 > +#define HV_STATUS_INVALID_REGISTER_VALUE 0x50 > > /* > * The Hyper-V TimeRefCount register and the TSC -- Vitaly _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
next prev parent reply other threads:[~2021-02-09 13:07 UTC|newest] Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-11-21 0:30 [RFC PATCH 00/18] Microsoft Hypervisor root partition ioctl interface Nuno Das Neves 2020-11-21 0:30 ` [RFC PATCH 01/18] x86/hyperv: convert hyperv statuses to linux error codes Nuno Das Neves 2021-02-09 13:04 ` Vitaly Kuznetsov [this message] 2021-02-09 13:04 ` Vitaly Kuznetsov 2021-03-04 18:24 ` Nuno Das Neves 2020-11-21 0:30 ` [RFC PATCH 02/18] asm-generic/hyperv: convert hyperv statuses to strings Nuno Das Neves 2020-11-21 0:30 ` [RFC PATCH 03/18] virt/mshv: minimal mshv module (/dev/mshv/) Nuno Das Neves 2020-11-21 0:30 ` [RFC PATCH 04/18] virt/mshv: request version ioctl Nuno Das Neves 2021-02-08 19:41 ` Michael Kelley 2021-02-08 19:41 ` Michael Kelley via Virtualization 2021-03-04 21:35 ` Nuno Das Neves 2021-02-09 13:11 ` Vitaly Kuznetsov 2021-03-04 18:43 ` Nuno Das Neves 2021-03-05 9:18 ` Vitaly Kuznetsov 2021-03-05 9:18 ` Vitaly Kuznetsov 2021-04-07 0:21 ` Nuno Das Neves 2021-04-07 7:38 ` Vitaly Kuznetsov 2021-04-07 7:38 ` Vitaly Kuznetsov 2021-04-07 13:43 ` Wei Liu 2021-04-07 14:02 ` Vitaly Kuznetsov 2021-04-07 14:02 ` Vitaly Kuznetsov 2021-04-07 14:19 ` Wei Liu 2020-11-21 0:30 ` [RFC PATCH 05/18] virt/mshv: create partition ioctl Nuno Das Neves 2021-02-09 13:15 ` Vitaly Kuznetsov 2021-02-09 13:15 ` Vitaly Kuznetsov 2021-03-04 18:44 ` Nuno Das Neves 2020-11-21 0:30 ` [RFC PATCH 06/18] virt/mshv: create, initialize, finalize, delete partition hypercalls Nuno Das Neves 2021-02-08 19:42 ` Michael Kelley 2021-02-08 19:42 ` Michael Kelley via Virtualization 2021-03-04 23:49 ` Nuno Das Neves 2021-03-04 23:58 ` Michael Kelley 2021-03-04 23:58 ` Michael Kelley via Virtualization 2020-11-21 0:30 ` [RFC PATCH 07/18] virt/mshv: withdraw memory hypercall Nuno Das Neves 2021-02-08 19:44 ` Michael Kelley 2021-02-08 19:44 ` Michael Kelley via Virtualization 2021-03-05 21:01 ` Nuno Das Neves 2020-11-21 0:30 ` [RFC PATCH 08/18] virt/mshv: map and unmap guest memory Nuno Das Neves 2021-02-08 19:45 ` Michael Kelley 2021-02-08 19:45 ` Michael Kelley via Virtualization 2021-03-08 19:14 ` Nuno Das Neves 2021-03-08 19:30 ` Michael Kelley 2021-03-08 19:30 ` Michael Kelley via Virtualization 2020-11-21 0:30 ` [RFC PATCH 09/18] virt/mshv: create vcpu ioctl Nuno Das Neves 2020-11-21 0:30 ` [RFC PATCH 10/18] virt/mshv: get and set vcpu registers ioctls Nuno Das Neves 2021-02-08 19:47 ` Michael Kelley 2021-02-08 19:47 ` Michael Kelley via Virtualization 2021-03-09 1:39 ` Nuno Das Neves 2020-11-21 0:30 ` [RFC PATCH 11/18] virt/mshv: set up synic pages for intercept messages Nuno Das Neves 2021-02-08 19:47 ` Michael Kelley 2021-02-08 19:47 ` Michael Kelley via Virtualization 2021-03-11 19:37 ` Nuno Das Neves 2021-03-11 20:45 ` Michael Kelley 2021-03-11 20:45 ` Michael Kelley via Virtualization 2020-11-21 0:30 ` [RFC PATCH 12/18] virt/mshv: run vp ioctl and isr Nuno Das Neves 2020-11-24 16:15 ` Wei Liu 2020-11-21 0:30 ` [RFC PATCH 13/18] virt/mshv: install intercept ioctl Nuno Das Neves 2020-11-21 0:30 ` [RFC PATCH 14/18] virt/mshv: assert interrupt ioctl Nuno Das Neves 2020-11-21 0:30 ` [RFC PATCH 15/18] virt/mshv: get and set vp state ioctls Nuno Das Neves 2021-02-08 19:48 ` Michael Kelley 2021-02-08 19:48 ` Michael Kelley via Virtualization 2021-03-11 23:38 ` Nuno Das Neves 2020-11-21 0:30 ` [RFC PATCH 16/18] virt/mshv: mmap vp register page Nuno Das Neves 2021-02-08 19:49 ` Michael Kelley 2021-02-08 19:49 ` Michael Kelley via Virtualization 2021-03-25 17:36 ` Nuno Das Neves 2020-11-21 0:30 ` [RFC PATCH 17/18] virt/mshv: get and set partition property ioctls Nuno Das Neves 2020-11-21 0:30 ` [RFC PATCH 18/18] virt/mshv: Add enlightenment bits to create partition ioctl Nuno Das Neves 2020-11-24 16:18 ` [RFC PATCH 00/18] Microsoft Hypervisor root partition ioctl interface Wei Liu 2021-02-08 19:40 ` Michael Kelley 2021-02-08 19:40 ` Michael Kelley via Virtualization
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=871rdpo0is.fsf@vitty.brq.redhat.com \ --to=vkuznets@redhat.com \ --cc=kys@microsoft.com \ --cc=ligrassi@microsoft.com \ --cc=linux-hyperv@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mikelley@microsoft.com \ --cc=nunodasneves@linux.microsoft.com \ --cc=sunilmut@microsoft.com \ --cc=viremana@linux.microsoft.com \ --cc=virtualization@lists.linux-foundation.org \ --cc=wei.liu@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.