From patchwork Mon Jul 4 11:55:44 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 9212463 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B97D460467 for ; Mon, 4 Jul 2016 11:57:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A90F227F99 for ; Mon, 4 Jul 2016 11:57:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9DE4E286B2; Mon, 4 Jul 2016 11:57:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 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.wl.linuxfoundation.org (Postfix) with ESMTPS id 2729427F99 for ; Mon, 4 Jul 2016 11:57:05 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bK2Th-0005bR-MH; Mon, 04 Jul 2016 11:55:53 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bK2Tg-0005bJ-Jm for xen-devel@lists.xenproject.org; Mon, 04 Jul 2016 11:55:52 +0000 Received: from [85.158.139.211] by server-13.bemta-5.messagelabs.com id A2/09-16475-7CE4A775; Mon, 04 Jul 2016 11:55:51 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrFIsWRWlGSWpSXmKPExsXS6fjDS/eIX1W 4weIGC4vvWyYzOTB6HP5whSWAMYo1My8pvyKBNWPZt0nMBefMKla9XsjYwNij1sXIySEkkCex 7fxrdhCbV8BOYlvvDGYQW0LAUGLf/FVsXYwcHCwCqhJ7D3GAhNkE1CXanm1nBQmLCBhInDuaB GIyC+hLbFvHAlIhLOAssb//JSPEcDuJmcc6mEFKOAXsJf42G4GYvAKCEn93CINUMANVbF/znH UCI88shMwsJBkIW0vi4a9bLBC2tsSyha+ZZ4GtlZZY/o8DImwj0b3uGTOqEhDbXWLjoq1sCxg 5VjFqFKcWlaUW6Roa6iUVZaZnlOQmZuboGhqY6uWmFhcnpqfmJCYV6yXn525iBIYpAxDsYFzZ 7nyIUZKDSUmUN929KlyILyk/pTIjsTgjvqg0J7X4EKMMB4eSBK+eL1BOsCg1PbUiLTMHGDEwa QkOHiURXmGQNG9xQWJucWY6ROoUo6KUOK8nSEIAJJFRmgfXBovSS4yyUsK8jECHCPEUpBblZp agyr9iFOdgVBLmLQaZwpOZVwI3/RXQYiagxayx5SCLSxIRUlINjHLL260XF3LtbN1d5bZu3lP m1dcztrI+cj3JuspqSuR99TniD0X/Jf5kesfWnya2bfOyOcu41coi11z8HnZB9Lhw0vo6iz1N E3XObW1Qn2ntErdrvZVJnuy/b3HNi86IVWYeC5y2zWSPiHHqu6u+exoKdok/TJyz6HT9Bjf9q /crd0kl6Vl/zlBiKc5INNRiLipOBABS+xxrzQIAAA== X-Env-Sender: JBeulich@suse.com X-Msg-Ref: server-16.tower-206.messagelabs.com!1467633347!32425051!1 X-Originating-IP: [137.65.248.74] X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG X-StarScan-Received: X-StarScan-Version: 8.46; banners=-,-,- X-VirusChecked: Checked Received: (qmail 53405 invoked from network); 4 Jul 2016 11:55:48 -0000 Received: from prv-mh.provo.novell.com (HELO prv-mh.provo.novell.com) (137.65.248.74) by server-16.tower-206.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 4 Jul 2016 11:55:48 -0000 Received: from INET-PRV-MTA by prv-mh.provo.novell.com with Novell_GroupWise; Mon, 04 Jul 2016 05:55:46 -0600 Message-Id: <577A6AE002000078000FAD08@prv-mh.provo.novell.com> X-Mailer: Novell GroupWise Internet Agent 14.2.0 Date: Mon, 04 Jul 2016 05:55:44 -0600 From: "Jan Beulich" To: "xen-devel" References: <577A69E502000078000FACED@prv-mh.provo.novell.com> In-Reply-To: <577A69E502000078000FACED@prv-mh.provo.novell.com> Mime-Version: 1.0 Cc: Andrew Cooper Subject: [Xen-devel] [PATCH v2 2/3] drop pointless and add useful default cases 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-Virus-Scanned: ClamAV using ClamSMTP There's no point in having default cases when all possible values have respective case statements, or when there's just a "break" statement. Otoh the two main switch() statements better get default cases added, just to cover the case of someone altering one of the two lookup arrays without suitably changing these switch statements. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper --- v2: use ASSERT_UNREACHABLE() in favor of BUG(), and log a message once. x86emul: drop pointless and add useful default cases There's no point in having default cases when all possible values have respective case statements, or when there's just a "break" statement. Otoh the two main switch() statements better get default cases added, just to cover the case of someone altering one of the two lookup arrays without suitably changing these switch statements. Signed-off-by: Jan Beulich --- v2: use ASSERT_UNREACHABLE() in favor of BUG(), and log a message once. --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -1379,7 +1379,6 @@ decode_segment(uint8_t modrm_reg) case 3: return x86_seg_ds; case 4: return x86_seg_fs; case 5: return x86_seg_gs; - default: break; } return decode_segment_failed; } @@ -1503,6 +1502,19 @@ int x86emul_unhandleable_rw( return X86EMUL_UNHANDLEABLE; } +static void internal_error(const char *which, uint8_t byte, + const struct cpu_user_regs *regs) +{ +#ifdef __XEN__ + static bool_t logged; + + if ( !test_and_set_bool(logged) ) + gprintk(XENLOG_ERR, "Internal error: %s/%02x [%04x:%08lx]\n", + which, byte, regs->cs, regs->eip); +#endif + ASSERT_UNREACHABLE(); +} + int x86_emulate( struct x86_emulate_ctxt *ctxt, @@ -2996,8 +3008,6 @@ x86_emulate( case 7: /* fdivr */ emulate_fpu_insn_memsrc("fdivrs", src.val); break; - default: - goto cannot_emulate; } } break; @@ -3128,8 +3138,6 @@ x86_emulate( case 7: /* fidivr m32i */ emulate_fpu_insn_memsrc("fidivrl", src.val); break; - default: - goto cannot_emulate; } } break; @@ -3352,8 +3360,6 @@ x86_emulate( case 7: /* fidivr m16i */ emulate_fpu_insn_memsrc("fidivrs", src.val); break; - default: - goto cannot_emulate; } } break; @@ -3431,8 +3437,6 @@ x86_emulate( dst.type = OP_MEM; emulate_fpu_insn_memdst("fistpll", dst.val); break; - default: - goto cannot_emulate; } } break; @@ -3750,8 +3754,6 @@ x86_emulate( } break; } - default: - goto cannot_emulate; } break; @@ -3845,10 +3847,12 @@ x86_emulate( goto push; case 7: generate_exception_if(1, EXC_UD, -1); - default: - goto cannot_emulate; } break; + + default: + internal_error("primary", b, ctxt->regs); + goto cannot_emulate; } writeback: @@ -4815,6 +4819,10 @@ x86_emulate( break; } break; + + default: + internal_error("secondary", b, ctxt->regs); + goto cannot_emulate; } goto writeback; --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -1379,7 +1379,6 @@ decode_segment(uint8_t modrm_reg) case 3: return x86_seg_ds; case 4: return x86_seg_fs; case 5: return x86_seg_gs; - default: break; } return decode_segment_failed; } @@ -1503,6 +1502,19 @@ int x86emul_unhandleable_rw( return X86EMUL_UNHANDLEABLE; } +static void internal_error(const char *which, uint8_t byte, + const struct cpu_user_regs *regs) +{ +#ifdef __XEN__ + static bool_t logged; + + if ( !test_and_set_bool(logged) ) + gprintk(XENLOG_ERR, "Internal error: %s/%02x [%04x:%08lx]\n", + which, byte, regs->cs, regs->eip); +#endif + ASSERT_UNREACHABLE(); +} + int x86_emulate( struct x86_emulate_ctxt *ctxt, @@ -2996,8 +3008,6 @@ x86_emulate( case 7: /* fdivr */ emulate_fpu_insn_memsrc("fdivrs", src.val); break; - default: - goto cannot_emulate; } } break; @@ -3128,8 +3138,6 @@ x86_emulate( case 7: /* fidivr m32i */ emulate_fpu_insn_memsrc("fidivrl", src.val); break; - default: - goto cannot_emulate; } } break; @@ -3352,8 +3360,6 @@ x86_emulate( case 7: /* fidivr m16i */ emulate_fpu_insn_memsrc("fidivrs", src.val); break; - default: - goto cannot_emulate; } } break; @@ -3431,8 +3437,6 @@ x86_emulate( dst.type = OP_MEM; emulate_fpu_insn_memdst("fistpll", dst.val); break; - default: - goto cannot_emulate; } } break; @@ -3750,8 +3754,6 @@ x86_emulate( } break; } - default: - goto cannot_emulate; } break; @@ -3845,10 +3847,12 @@ x86_emulate( goto push; case 7: generate_exception_if(1, EXC_UD, -1); - default: - goto cannot_emulate; } break; + + default: + internal_error("primary", b, ctxt->regs); + goto cannot_emulate; } writeback: @@ -4815,6 +4819,10 @@ x86_emulate( break; } break; + + default: + internal_error("secondary", b, ctxt->regs); + goto cannot_emulate; } goto writeback;