From owner-svn-src-user@FreeBSD.ORG Sat Feb 21 23:21:41 2015 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 689909E3; Sat, 21 Feb 2015 23:21:41 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 396FF7D0; Sat, 21 Feb 2015 23:21:41 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t1LNLfve039272; Sat, 21 Feb 2015 23:21:41 GMT (envelope-from nwhitehorn@FreeBSD.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t1LNLf2K039270; Sat, 21 Feb 2015 23:21:41 GMT (envelope-from nwhitehorn@FreeBSD.org) Message-Id: <201502212321.t1LNLf2K039270@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: nwhitehorn set sender to nwhitehorn@FreeBSD.org using -f From: Nathan Whitehorn Date: Sat, 21 Feb 2015 23:21:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r279120 - user/nwhitehorn/ppc64-pmap-rework/ps3 X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 21 Feb 2015 23:21:41 -0000 Author: nwhitehorn Date: Sat Feb 21 23:21:40 2015 New Revision: 279120 URL: https://svnweb.freebsd.org/changeset/base/279120 Log: Fix reinsertion of pages into secondary PTE group. Something here is still causing instability under high load, but this is a step forward at least. Modified: user/nwhitehorn/ppc64-pmap-rework/ps3/mmu_ps3.c Modified: user/nwhitehorn/ppc64-pmap-rework/ps3/mmu_ps3.c ============================================================================== --- user/nwhitehorn/ppc64-pmap-rework/ps3/mmu_ps3.c Sat Feb 21 23:20:05 2015 (r279119) +++ user/nwhitehorn/ppc64-pmap-rework/ps3/mmu_ps3.c Sat Feb 21 23:21:40 2015 (r279120) @@ -185,15 +185,16 @@ mps3_pte_clear(mmu_t mmu, struct pvo_ent rw_rlock(&mps3_eviction_lock); refchg = mps3_pte_synch(mmu, pvo); - if (refchg < 0) { - rw_runlock(&mps3_eviction_lock); - return (refchg); - } + if (refchg < 0) { + rw_runlock(&mps3_eviction_lock); + return (refchg); + } moea64_pte_from_pvo(pvo, &pte); pte.pte_lo |= refchg; pte.pte_lo &= ~ptebit; + /* XXX: race on RC bits between write and sync. Anything to do? */ lv1_write_htab_entry(mps3_vas_id, pvo->pvo_pte.slot, pte.pte_hi, pte.pte_lo); rw_runlock(&mps3_eviction_lock); @@ -208,10 +209,11 @@ mps3_pte_unset(mmu_t mmu, struct pvo_ent rw_rlock(&mps3_eviction_lock); refchg = mps3_pte_synch(mmu, pvo); - if (refchg < 0) { - rw_runlock(&mps3_eviction_lock); - return (-1); - } + if (refchg < 0) { + moea64_pte_overflow--; + rw_runlock(&mps3_eviction_lock); + return (-1); + } /* XXX: race on RC bits between unset and sync. Anything to do? */ lv1_write_htab_entry(mps3_vas_id, pvo->pvo_pte.slot, 0, 0); rw_runlock(&mps3_eviction_lock); @@ -227,8 +229,13 @@ mps3_pte_insert(mmu_t mmu, struct pvo_en struct lpte pte, evicted; uint64_t index; + if (pvo->pvo_vaddr & PVO_HID) { + /* Hypercall needs primary PTEG */ + pvo->pvo_vaddr &= ~PVO_HID; + pvo->pvo_pte.slot ^= (moea64_pteg_mask << 3); + } + pvo->pvo_pte.slot &= ~7UL; - pvo->pvo_vaddr &= ~PVO_HID; moea64_pte_from_pvo(pvo, &pte); evicted.pte_hi = 0; PTESYNC();