From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753841AbYH0Ha2 (ORCPT ); Wed, 27 Aug 2008 03:30:28 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752414AbYH0HaT (ORCPT ); Wed, 27 Aug 2008 03:30:19 -0400 Received: from wf-out-1314.google.com ([209.85.200.171]:42829 "EHLO wf-out-1314.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751476AbYH0HaR (ORCPT ); Wed, 27 Aug 2008 03:30:17 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; b=crnpFzJys7CoT2rfJ53L/yOSo/OqazMfjVoywX8z2LeqsKKi/1Kl1uuKFU2msNZ2ec GGnLv3XBNdjWPL3htIlNo7NOK1CwfajTl//lqdLFgOr2rjEU4w9+vYBu3GAilfIPqWIe LMWilQbdELHgv2hcUKnhGtl2caoBU10CS4/8k= From: Yinghai Lu To: Ingo Molnar , Thomas Gleixner , "H. Peter Anvin" , Andrew Morton Cc: linux-kernel@vger.kernel.org, Yinghai Lu , Pavel Machek , Benjamin Herrenschmidt , Jesse Barnes Subject: RFC [PATCH] x86/pci: reserve extra page to avoid error caused by P2P pref DMA reads Date: Wed, 27 Aug 2008 00:29:19 -0700 Message-Id: <1219822159-17245-1-git-send-email-yhlu.kernel@gmail.com> X-Mailer: git-send-email 1.5.4.5 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Diag guys, found one system when loading is high, will have gart wark error. root cause is P2P bridge try to prefetch for several intel e1000 under it. and that skb is near GART iommu area. try to reserve page in the boundary at first. last page near TOM2, and last page near MMIO also gart first and last page. need one better way for all arch support PCI and memory with a lot of holes etc. Signed-off-by: Yinghai Lu Cc: Pavel Machek Cc: Benjamin Herrenschmidt Cc: Jesse Barnes --- arch/x86/kernel/pci-dma.c | 28 ++++++++++++++++++++++++++++ arch/x86/kernel/pci-gart_64.c | 6 ++++++ 2 files changed, 34 insertions(+) Index: linux-2.6/arch/x86/kernel/pci-dma.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/pci-dma.c +++ linux-2.6/arch/x86/kernel/pci-dma.c @@ -72,12 +72,40 @@ static int __init parse_dma32_size_opt(c } early_param("dma32_size", parse_dma32_size_opt); +static void __init reserve_last_page(unsigned long pfn) +{ + unsigned long phys; + void *ptr; + + phys = (pfn - 1)<