From 21a85ed569e59c5968b770a913a83a6b45213be7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Date: Wed, 22 Jul 2015 16:45:35 +0200 Subject: [PATCH 1/3] x86/libxl: replace non-POSIX error codes used by PSR code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PSR was using EBADSLT and EUSERS which are not POSIX error codes, replace them with ENOTSOCK and EOVERFLOW respectively. Signed-off-by: Roger Pau Monné Reviewed-by: Jan Beulich Acked-by: Wei Liu Release-acked-by: Wei Liu --- tools/libxl/libxl_psr.c | 6 +++--- xen/arch/x86/psr.c | 8 ++++---- xen/include/public/errno.h | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/tools/libxl/libxl_psr.c b/tools/libxl/libxl_psr.c index 2a077773ab..33782394a2 100644 --- a/tools/libxl/libxl_psr.c +++ b/tools/libxl/libxl_psr.c @@ -31,7 +31,7 @@ static void libxl__psr_log_err_msg(libxl__gc *gc, int err) case ESRCH: msg = "invalid domain ID"; break; - case EBADSLT: + case ENOTSOCK: msg = "socket is not supported"; break; case EFAULT: @@ -59,7 +59,7 @@ static void libxl__psr_cmt_log_err_msg(libxl__gc *gc, int err) case ENOENT: msg = "CMT is not attached to this domain"; break; - case EUSERS: + case EOVERFLOW: msg = "no free RMID available"; break; default: @@ -81,7 +81,7 @@ static void libxl__psr_cat_log_err_msg(libxl__gc *gc, int err) case ENOENT: msg = "CAT is not enabled on the socket"; break; - case EUSERS: + case EOVERFLOW: msg = "no free COS available"; break; case EEXIST: diff --git a/xen/arch/x86/psr.c b/xen/arch/x86/psr.c index ed59803573..c0daa2effe 100644 --- a/xen/arch/x86/psr.c +++ b/xen/arch/x86/psr.c @@ -178,7 +178,7 @@ int psr_alloc_rmid(struct domain *d) if ( rmid > psr_cmt->rmid_max ) { d->arch.psr_rmid = 0; - return -EUSERS; + return -EOVERFLOW; } d->arch.psr_rmid = rmid; @@ -253,7 +253,7 @@ static struct psr_cat_socket_info *get_cat_socket_info(unsigned int socket) return ERR_PTR(-ENODEV); if ( socket >= nr_sockets ) - return ERR_PTR(-EBADSLT); + return ERR_PTR(-ENOTSOCK); if ( !test_bit(socket, cat_socket_enable) ) return ERR_PTR(-ENOENT); @@ -334,7 +334,7 @@ static int write_l3_cbm(unsigned int socket, unsigned int cos, uint64_t cbm) unsigned int cpu = get_socket_cpu(socket); if ( cpu >= nr_cpu_ids ) - return -EBADSLT; + return -ENOTSOCK; on_selected_cpus(cpumask_of(cpu), do_write_l3_cbm, &info, 1); } @@ -383,7 +383,7 @@ int psr_set_l3_cbm(struct domain *d, unsigned int socket, uint64_t cbm) if ( !found ) { spin_unlock(&info->cbm_lock); - return -EUSERS; + return -EOVERFLOW; } cos = found - map; diff --git a/xen/include/public/errno.h b/xen/include/public/errno.h index 9a7e41110f..50adcb9699 100644 --- a/xen/include/public/errno.h +++ b/xen/include/public/errno.h @@ -65,6 +65,7 @@ XEN_ERRNO(EILSEQ, 84) /* Illegal byte sequence */ XEN_ERRNO(ERESTART, 85) /* Interrupted system call should be restarted */ #endif XEN_ERRNO(EUSERS, 87) /* Too many users */ +XEN_ERRNO(ENOTSOCK, 88) /* Socket operation on non-socket */ XEN_ERRNO(EOPNOTSUPP, 95) /* Operation not supported on transport endpoint */ XEN_ERRNO(EADDRINUSE, 98) /* Address already in use */ XEN_ERRNO(EADDRNOTAVAIL, 99) /* Cannot assign requested address */ From e919fb2ac32a27c262fee8a40c044008b3f8fd09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Date: Wed, 22 Jul 2015 16:47:09 +0200 Subject: [PATCH 2/3] replace non-POSIX error codes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some DOMCTLs returned non-POSIX error codes, replace them with POSIX compilant values instead. EBADRQC and EBADSLT are replaced by EDOM, while EUSERS is replaced with EOVERFLOW. Signed-off-by: Roger Pau Monné Replace two EDOM uses. Reviewed-by: Jan Beulich Acked-by: George Dunlap Release-acked-by: Wei Liu --- xen/arch/x86/mm/paging.c | 2 +- xen/common/domain.c | 4 ++-- xen/common/hvm/save.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c index 708915515e..942d8491fc 100644 --- a/xen/arch/x86/mm/paging.c +++ b/xen/arch/x86/mm/paging.c @@ -766,7 +766,7 @@ long paging_domctl_continuation(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl) if ( op.interface_version != XEN_DOMCTL_INTERFACE_VERSION || op.cmd != XEN_DOMCTL_shadow_op ) - return -EBADRQC; + return -EOPNOTSUPP; d = rcu_lock_domain_by_id(op.domain); if ( d == NULL ) diff --git a/xen/common/domain.c b/xen/common/domain.c index 8efef5c179..791166b06c 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -900,7 +900,7 @@ int vcpu_pause_by_systemcontroller(struct vcpu *v) new = old + 1; if ( new > 255 ) - return -EUSERS; + return -EOVERFLOW; prev = cmpxchg(&v->controller_pause_count, old, new); } while ( prev != old ); @@ -980,7 +980,7 @@ int __domain_pause_by_systemcontroller(struct domain *d, * toolstack overflowing d->pause_count with many repeated hypercalls. */ if ( new > 255 ) - return -EUSERS; + return -EOVERFLOW; prev = cmpxchg(&d->controller_pause_count, old, new); } while ( prev != old ); diff --git a/xen/common/hvm/save.c b/xen/common/hvm/save.c index da6e668982..c9882e5783 100644 --- a/xen/common/hvm/save.c +++ b/xen/common/hvm/save.c @@ -114,7 +114,7 @@ int hvm_save_one(struct domain *d, uint16_t typecode, uint16_t instance, uint32_t off; const struct hvm_save_descriptor *desc; - rv = -EBADSLT; + rv = -ENOENT; for ( off = 0; off < (ctxt.cur - sizeof(*desc)); off += desc->length ) { desc = (void *)(ctxt.data + off); From afba7c6d9566f1556117b78e767f9678433a1f01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Date: Wed, 22 Jul 2015 16:53:22 +0200 Subject: [PATCH 3/3] remove non-POSIX error codes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Xen was using some non-POSIX error codes that are removed in this patch. For future reference, the list of POSIX error codes has been obtained from: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html The error codes already present and defined as optional (XSR), have been left in place. Signed-off-by: Roger Pau Monné Reviewed-by: Jan Beulich Release-acked-by: Wei Liu --- xen/include/public/errno.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/xen/include/public/errno.h b/xen/include/public/errno.h index 50adcb9699..8c88bb1d40 100644 --- a/xen/include/public/errno.h +++ b/xen/include/public/errno.h @@ -21,6 +21,12 @@ enum xen_errno { /* * Values originating from x86 Linux. Please consider using respective * values when adding new definitions here. + * + * The set of identifiers to be added here shouldn't extend beyond what + * POSIX mandates (see e.g. + * http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html) + * with the exception that we support some optional (XSR) values + * specified there (but no new ones should be added). */ XEN_ERRNO(EPERM, 1) /* Operation not permitted */ @@ -54,8 +60,6 @@ XEN_ERRNO(EDEADLK, 35) /* Resource deadlock would occur */ XEN_ERRNO(ENAMETOOLONG, 36) /* File name too long */ XEN_ERRNO(ENOLCK, 37) /* No record locks available */ XEN_ERRNO(ENOSYS, 38) /* Function not implemented */ -XEN_ERRNO(EBADRQC, 56) /* Invalid request code */ -XEN_ERRNO(EBADSLT, 57) /* Invalid slot */ XEN_ERRNO(ENODATA, 61) /* No data available */ XEN_ERRNO(ETIME, 62) /* Timer expired */ XEN_ERRNO(EBADMSG, 74) /* Not a data message */ @@ -64,7 +68,6 @@ XEN_ERRNO(EILSEQ, 84) /* Illegal byte sequence */ #ifdef __XEN__ /* Internal only, should never be exposed to the guest. */ XEN_ERRNO(ERESTART, 85) /* Interrupted system call should be restarted */ #endif -XEN_ERRNO(EUSERS, 87) /* Too many users */ XEN_ERRNO(ENOTSOCK, 88) /* Socket operation on non-socket */ XEN_ERRNO(EOPNOTSUPP, 95) /* Operation not supported on transport endpoint */ XEN_ERRNO(EADDRINUSE, 98) /* Address already in use */ @@ -72,8 +75,6 @@ XEN_ERRNO(EADDRNOTAVAIL, 99) /* Cannot assign requested address */ XEN_ERRNO(ENOBUFS, 105) /* No buffer space available */ XEN_ERRNO(EISCONN, 106) /* Transport endpoint is already connected */ XEN_ERRNO(ENOTCONN, 107) /* Transport endpoint is not connected */ -XEN_ERRNO(ESHUTDOWN, 108) /* Cannot send after transport endpoint shutdown */ -XEN_ERRNO(ETOOMANYREFS, 109) /* Too many references: cannot splice */ XEN_ERRNO(ETIMEDOUT, 110) /* Connection timed out */ #undef XEN_ERRNO