From patchwork Thu Mar 3 14:14:44 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Cooper X-Patchwork-Id: 8493041 Return-Path: X-Original-To: patchwork-xen-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id E00AE9F8A8 for ; Thu, 3 Mar 2016 14:17:03 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id E61D32012B for ; Thu, 3 Mar 2016 14:17:02 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4D7F3200E8 for ; Thu, 3 Mar 2016 14:16:57 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xen.org with esmtp (Exim 4.84) (envelope-from ) id 1abU1j-000621-Pp; Thu, 03 Mar 2016 14:14:51 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.84) (envelope-from ) id 1abU1i-00061X-9n for xen-devel@lists.xen.org; Thu, 03 Mar 2016 14:14:50 +0000 Received: from [85.158.137.68] by server-8.bemta-3.messagelabs.com id 1E/81-04050-8D648D65; Thu, 03 Mar 2016 14:14:48 +0000 X-Env-Sender: prvs=863db4d22=Andrew.Cooper3@citrix.com X-Msg-Ref: server-3.tower-31.messagelabs.com!1457014487!26684393!1 X-Originating-IP: [66.165.176.89] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n, received_headers: No Received headers X-StarScan-Received: X-StarScan-Version: 8.11; banners=-,-,- X-VirusChecked: Checked Received: (qmail 52575 invoked from network); 3 Mar 2016 14:14:48 -0000 Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89) by server-3.tower-31.messagelabs.com with RC4-SHA encrypted SMTP; 3 Mar 2016 14:14:48 -0000 X-IronPort-AV: E=Sophos;i="5.22,532,1449532800"; d="scan'208";a="336295192" From: Andrew Cooper To: Xen-devel Date: Thu, 3 Mar 2016 14:14:44 +0000 Message-ID: <1457014484-2282-1-git-send-email-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <56D8044902000078000D8A7A@prv-mh.provo.novell.com> References: <56D8044902000078000D8A7A@prv-mh.provo.novell.com> MIME-Version: 1.0 X-DLP: MIA2 Cc: Andrew Cooper , Tim Deegan , Jan Beulich , Doug Goldstein Subject: [Xen-devel] [PATCH v3] xen/errno: Reduce complexity of inclusion X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The inclusion rules conditions for errno.h were unnecesserily complicated, and required the includer to jump through hoops if they wished to avoid getting multiple namespaces worth of constants. Simply the logic, and document what is going on. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Tim Deegan CC: Doug Goldstein v3: * Reinstate magic documentation comments * Provide assembly-suitable defaults if appropriate --- xen/include/public/errno.h | 46 ++++++++++++++++++++++++++++++++++++++-------- xen/include/xen/errno.h | 6 ++---- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/xen/include/public/errno.h b/xen/include/public/errno.h index dbac396..88e72a8 100644 --- a/xen/include/public/errno.h +++ b/xen/include/public/errno.h @@ -1,4 +1,30 @@ +/* + * There are two expected ways of including this header. + * + * 1) The "default" case (expected from tools etc). + * + * Simply #include + * + * In this circumstance, normal header guards apply and the includer shall get + * an enumeration in the XEN_xxx namespace, appropriate for C or assembly. + * + * 2) The special case where the includer provides a XEN_ERRNO() in scope. + * + * In this case, no inclusion guards apply and the caller is responsible for + * their XEN_ERRNO() being appropriate in the included context. + */ + +#ifndef XEN_ERRNO + +/* + * Includer has not provided a custom XEN_ERRNO(). Arrange for normal header + * guards, an automatic enum (for C code) and constants in the XEN_xxx + * namespace. + */ #ifndef __XEN_PUBLIC_ERRNO_H__ +#define __XEN_PUBLIC_ERRNO_H__ + +#define XEN_ERRNO_DEFAULT_INCLUDE #ifndef __ASSEMBLY__ @@ -11,11 +37,12 @@ enum xen_errno { #endif /* __ASSEMBLY__ */ +#endif /* __XEN_PUBLIC_ERRNO_H__ */ +#endif /* !XEN_ERRNO */ + /* ` enum neg_errnoval { [ -Efoo for each Efoo in the list below ] } */ /* ` enum errnoval { */ -#endif /* __XEN_PUBLIC_ERRNO_H__ */ - #ifdef XEN_ERRNO /* @@ -82,16 +109,19 @@ XEN_ERRNO(EISCONN, 106) /* Transport endpoint is already connected */ XEN_ERRNO(ENOTCONN, 107) /* Transport endpoint is not connected */ XEN_ERRNO(ETIMEDOUT, 110) /* Connection timed out */ -#undef XEN_ERRNO #endif /* XEN_ERRNO */ - -#ifndef __XEN_PUBLIC_ERRNO_H__ -#define __XEN_PUBLIC_ERRNO_H__ - /* ` } */ + +/* + * Clean up from a default include. Close the enum (for C) and remove the + * default XEN_ERRNO from scope. + */ +#ifdef XEN_ERRNO_DEFAULT_INCLUDE +#undef XEN_ERRNO_DEFAULT_INCLUDE +#undef XEN_ERRNO #ifndef __ASSEMBLY__ }; #endif -#endif /* __XEN_PUBLIC_ERRNO_H__ */ +#endif /* XEN_ERRNO_DEFAULT_INCLUDE */ diff --git a/xen/include/xen/errno.h b/xen/include/xen/errno.h index 3178466..69b28dd 100644 --- a/xen/include/xen/errno.h +++ b/xen/include/xen/errno.h @@ -1,18 +1,16 @@ #ifndef __XEN_ERRNO_H__ #define __XEN_ERRNO_H__ -#include - #ifndef __ASSEMBLY__ -#define XEN_ERRNO(name, value) name = XEN_##name, +#define XEN_ERRNO(name, value) name = value, enum { #include }; #else /* !__ASSEMBLY__ */ -#define XEN_ERRNO(name, value) .equ name, XEN_##name +#define XEN_ERRNO(name, value) .equ name, value #include #endif /* __ASSEMBLY__ */