From owner-p4-projects@FreeBSD.ORG Thu May 29 18:21:17 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0811A37B404; Thu, 29 May 2003 18:21:17 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 79F2537B401 for ; Thu, 29 May 2003 18:21:16 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 21F1643F93 for ; Thu, 29 May 2003 18:21:16 -0700 (PDT) (envelope-from marcel@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.6/8.12.6) with ESMTP id h4U1LF0U083956 for ; Thu, 29 May 2003 18:21:15 -0700 (PDT) (envelope-from marcel@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.6/8.12.6/Submit) id h4U1LFQv083953 for perforce@freebsd.org; Thu, 29 May 2003 18:21:15 -0700 (PDT) Date: Thu, 29 May 2003 18:21:15 -0700 (PDT) Message-Id: <200305300121.h4U1LFQv083953@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to marcel@freebsd.org using -f From: Marcel Moolenaar To: Perforce Change Reviews Subject: PERFORCE change 32084 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 May 2003 01:21:18 -0000 http://perforce.freebsd.org/chv.cgi?CH=32084 Change 32084 by marcel@marcel_nfs on 2003/05/29 18:20:53 When we discard user registers on the kernel stack when we execve, make sure we have them all written to the backing store first. We cannot discard them is they are still dirty. Affected files ... .. //depot/projects/ia64/sys/ia64/ia64/machdep.c#73 edit Differences ... ==== //depot/projects/ia64/sys/ia64/ia64/machdep.c#73 (text+ko) ==== @@ -1077,8 +1077,18 @@ if (ndirty > 0) { __asm __volatile("mov ar.rsc=0;;"); __asm __volatile("mov %0=ar.bspstore" : "=r"(bspst)); - rssz = bspst - kstack - ndirty; - bcopy((void*)(kstack + ndirty), (void*)kstack, rssz); + /* + * Make sure we have all the user registers written out. + * We're doing culculations with ndirty and ar.bspstore + * and we better make sure ar.bspstore >= ndirty. + */ + rssz = bspst - kstack; + if (rssz < ndirty) { + __asm __volatile("flushrs;;"); + __asm __volatile("mov %0=ar.bspstore" : "=r"(bspst)); + rssz = bspst - kstack; + } + bcopy((void*)(kstack + ndirty), (void*)kstack, rssz - ndirty); bspst -= ndirty; __asm __volatile("mov ar.bspstore=%0;;" :: "r"(bspst)); __asm __volatile("mov ar.rsc=3");