From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sheng Yang Subject: Re: [PATCH v2] test: Add IDT framework Date: Fri, 11 Jun 2010 15:52:04 +0800 Message-ID: <201006111552.04765.sheng@linux.intel.com> References: <1276176614-7347-1-git-send-email-avi@redhat.com> Mime-Version: 1.0 Content-Type: Text/Plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, Marcelo Tosatti To: Avi Kivity Return-path: Received: from mga09.intel.com ([134.134.136.24]:44994 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751628Ab0FKHzZ (ORCPT ); Fri, 11 Jun 2010 03:55:25 -0400 In-Reply-To: <1276176614-7347-1-git-send-email-avi@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On Thursday 10 June 2010 21:30:14 Avi Kivity wrote: > Signed-off-by: Sheng Yang > Signed-off-by: Avi Kivity Really great work! > --- > kvm/test/config-x86-common.mak | 2 + > kvm/test/config-x86_64.mak | 2 +- > kvm/test/flat.lds | 7 ++- > kvm/test/lib/x86/idt.h | 19 +++++ > kvm/test/x86/idt.c | 154 > ++++++++++++++++++++++++++++++++++++++++ kvm/test/x86/idt_test.c | > 53 ++++++++++++++ > 6 files changed, 235 insertions(+), 2 deletions(-) > create mode 100644 kvm/test/lib/x86/idt.h > create mode 100644 kvm/test/x86/idt.c > create mode 100644 kvm/test/x86/idt_test.c [...] > +void do_handle_exception(struct ex_regs *regs) > +{ > + struct ex_record *ex; > + unsigned ex_val; > + > + printf("exception: vector %ld error %lx rip %lx\n", regs->vector, > + regs->error_code, regs->rip); > + > + ex_val = regs->vector | (regs->error_code << 16); > + > + asm("mov %0, %%gs:4" : : "r"(ex_val)); > + > + for (ex = &exception_table_start; ex != &exception_table_end; ++ex) { > + printf("ex_table: %lx %lx\n", ex->rip, ex->handler); How about use something like #ifdef VERBOSE? (Well, in fact I didn't use unit test much, if you don't mind the format of output, it's also fine.) > +int test(void) > +{ > + int r; > + > + setup_idt(); > + printf("GP testing: "); > + r = test_gp(); > + report(r == GP_VECTOR, "#GP"); > + r = test_ud2(); > + report(r == UD_VECTOR, "#UD"); Miss a "UD testing"? -- regards Yang, Sheng > + return !nr_fail ? 0 : 1; > +} > + > +int main(void) > +{ > + printf("start testing\n"); > + test(); > + return 0; > +}