From owner-p4-projects@FreeBSD.ORG Wed Aug 20 05:53:15 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4744A1065682; Wed, 20 Aug 2008 05:53:15 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0C5CD106567E for ; Wed, 20 Aug 2008 05:53:15 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id EC70A8FC0C for ; Wed, 20 Aug 2008 05:53:14 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.2/8.14.2) with ESMTP id m7K5rEbZ003889 for ; Wed, 20 Aug 2008 05:53:14 GMT (envelope-from julian@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.2/8.14.1/Submit) id m7K5rEeW003887 for perforce@freebsd.org; Wed, 20 Aug 2008 05:53:14 GMT (envelope-from julian@freebsd.org) Date: Wed, 20 Aug 2008 05:53:14 GMT Message-Id: <200808200553.m7K5rEeW003887@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to julian@freebsd.org using -f From: Julian Elischer To: Perforce Change Reviews Cc: Subject: PERFORCE change 147886 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Aug 2008 05:53:15 -0000 http://perforce.freebsd.org/chv.cgi?CH=147886 Change 147886 by julian@julian_trafmon1 on 2008/08/20 05:52:47 Pick upp fixed to allow compile @147885 Affected files ... .. //depot/projects/vimage-commit2/src/sys/i386/i386/machdep.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/net/if.c#10 integrate .. //depot/projects/vimage-commit2/src/sys/net/if_var.h#5 integrate .. //depot/projects/vimage-commit2/src/sys/xen/xenbus/xenbus_xs.c#3 integrate Differences ... ==== //depot/projects/vimage-commit2/src/sys/i386/i386/machdep.c#3 (text+ko) ==== @@ -38,7 +38,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/i386/i386/machdep.c,v 1.672 2008/08/17 23:38:14 kmacy Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/machdep.c,v 1.673 2008/08/20 03:28:32 kmacy Exp $"); #include "opt_apic.h" #include "opt_atalk.h" @@ -1149,9 +1149,14 @@ HYPERVISOR_shutdown(SHUTDOWN_poweroff); } +int scheduler_running; + static void cpu_idle_hlt(int busy) { + + scheduler_running = 1; + enable_intr(); idle_block(); } @@ -1199,7 +1204,11 @@ return; } +#ifdef XEN +void (*cpu_idle_fn)(int) = cpu_idle_hlt; +#else void (*cpu_idle_fn)(int) = cpu_idle_acpi; +#endif void cpu_idle(int busy) ==== //depot/projects/vimage-commit2/src/sys/net/if.c#10 (text+ko) ==== @@ -27,7 +27,7 @@ * SUCH DAMAGE. * * @(#)if.c 8.5 (Berkeley) 1/9/95 - * $FreeBSD: src/sys/net/if.c,v 1.283 2008/08/20 01:05:56 julian Exp $ + * $FreeBSD: src/sys/net/if.c,v 1.284 2008/08/20 05:00:18 thompsa Exp $ */ #include "opt_compat.h" @@ -176,7 +176,7 @@ return (ifp); } -void +static void ifnet_setbyindex(u_short idx, struct ifnet *ifp) { ==== //depot/projects/vimage-commit2/src/sys/net/if_var.h#5 (text+ko) ==== @@ -27,7 +27,7 @@ * SUCH DAMAGE. * * From: @(#)if.h 8.1 (Berkeley) 6/10/93 - * $FreeBSD: src/sys/net/if_var.h,v 1.119 2008/06/26 23:05:28 rwatson Exp $ + * $FreeBSD: src/sys/net/if_var.h,v 1.121 2008/08/20 05:00:18 thompsa Exp $ */ #ifndef _NET_IF_VAR_H_ @@ -646,6 +646,7 @@ }; struct ifnet *ifnet_byindex(u_short idx); + /* * Given the index, ifaddr_byindex() returns the one and only * link-level ifaddr for the interface. You are not supposed to use ==== //depot/projects/vimage-commit2/src/sys/xen/xenbus/xenbus_xs.c#3 (text+ko) ==== @@ -30,7 +30,7 @@ #include -__FBSDID("$FreeBSD: src/sys/xen/xenbus/xenbus_xs.c,v 1.3 2008/08/20 02:42:08 kmacy Exp $"); +__FBSDID("$FreeBSD: src/sys/xen/xenbus/xenbus_xs.c,v 1.4 2008/08/20 03:27:12 kmacy Exp $"); #include #include @@ -142,44 +142,67 @@ return xsd_errors[i].errnum; } -extern int scheduler_running; +extern void idle_block(void); +extern void kdb_backtrace(void); static void *read_reply(enum xsd_sockmsg_type *type, unsigned int *len) { struct xs_stored_msg *msg; char *body; - int i; - - if (scheduler_running == 0) { + int i, err; + enum xsd_sockmsg_type itype = *type; + + printf("read_reply "); + if (xenbus_running == 0) { /* * Give other domain time to run :-/ */ - for (i = 0; i < 100000; i++) + for (i = 0; i < 1000000 && (xenbus_running == 0); i++) { + err = xs_process_msg(type); + + if ((err == 0) + && (*type != XS_WATCH_EVENT)) + break; + HYPERVISOR_yield(); - xs_process_msg(); + } + + if (list_empty(&xs_state.reply_list)) { + printf("giving up and returning an error type=%d\n", + *type); + kdb_backtrace(); + return (ERR_PTR(-1)); + } + } - - spin_lock(&xs_state.reply_lock); - while (list_empty(&xs_state.reply_list)) { - spin_unlock(&xs_state.reply_lock); - wait_event_interruptible(&xs_state.reply_waitq, - !list_empty(&xs_state.reply_list)); - spin_lock(&xs_state.reply_lock); + mtx_lock(&xs_state.reply_lock); + if (xenbus_running) { + while (list_empty(&xs_state.reply_list)) { + mtx_unlock(&xs_state.reply_lock); + wait_event_interruptible(&xs_state.reply_waitq, + !list_empty(&xs_state.reply_list)); + + mtx_lock(&xs_state.reply_lock); + } } - + msg = TAILQ_FIRST(&xs_state.reply_list); list_del(&xs_state.reply_list, msg); - spin_unlock(&xs_state.reply_lock); + mtx_unlock(&xs_state.reply_lock); + printf("itype=%d htype=%d ", itype, msg->hdr.type); *type = msg->hdr.type; if (len) *len = msg->hdr.len; body = msg->u.reply.body; kfree(msg); - + if (len) + printf("len=%d\n", *len); + else + printf("len=NULL\n"); return body; }