From patchwork Wed Aug 14 13:12:50 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Wu X-Patchwork-Id: 267120 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4EAA42C00FA for ; Wed, 14 Aug 2013 23:13:03 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932466Ab3HNNM5 (ORCPT ); Wed, 14 Aug 2013 09:12:57 -0400 Received: from mail-wg0-f48.google.com ([74.125.82.48]:61473 "EHLO mail-wg0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932282Ab3HNNM4 (ORCPT ); Wed, 14 Aug 2013 09:12:56 -0400 Received: by mail-wg0-f48.google.com with SMTP id f12so7436064wgh.3 for ; Wed, 14 Aug 2013 06:12:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:user-agent:in-reply-to :references:mime-version:content-transfer-encoding:content-type; bh=xrJabZRFL/EohBMYR2kjYSDRPgnxppjWeA2ewjl5WGs=; b=czPv2lGqPDAsNHw0gdu9E1SBVnCdPAavonbMyYx1YT5b9np3bydSKMXERv5cDy7CEl WwzVnSW27ejHC4zXdgGSIQJDh9qsirOHLN5JWc6bdv8OaQ0XpfV6mhLnd1nGFwpgBvS/ nUocb2IX3T9fqDwtZUoXNdI6N2QFMjVSouU7y+8Osl/1ncvJxMaLOZLRnCneoCSXg4Jt 0FjlCfkzhM2DlSr8kC11A5uDDfhHNFd8FmsYiN+cLrRSUr2vnCWyGcUYeFYdlnt/k3C1 cBM1kkqPhRLrnbMuQoQJqYf+3a3tBx0CiO6i3TqpQO1UwMyuLdjX2HrTwVv2zV1jef87 RQYA== X-Received: by 10.194.9.229 with SMTP id d5mr19051wjb.66.1376485975257; Wed, 14 Aug 2013 06:12:55 -0700 (PDT) Received: from al.localnet (al.lekensteyn.nl. [2001:470:1f15:b83::c0d1:f1ed]) by mx.google.com with ESMTPSA id e7sm2973857wiy.4.2013.08.14.06.12.52 for (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 14 Aug 2013 06:12:53 -0700 (PDT) From: Peter Wu To: Francois Romieu Cc: netdev@vger.kernel.org, nic_swsd@realtek.com Subject: Re: [PATCH] r8169: fix invalid register dump Date: Wed, 14 Aug 2013 15:12:50 +0200 Message-ID: <3465288.NFVErF5E7l@al> User-Agent: KMail/4.10.5 (Linux/3.11.0-1-custom; KDE/4.10.5; x86_64; ; ) In-Reply-To: <20130813222038.GC5635@electric-eye.fr.zoreil.com> References: <1376426265-30353-1-git-send-email-lekensteyn@gmail.com> <20130813222038.GC5635@electric-eye.fr.zoreil.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Wednesday 14 August 2013 00:20:38 Francois Romieu wrote: > > - memcpy_fromio(p, tp->mmio_addr, regs->len); > > + for (i = 0; i < regs->len - 4; i += 4) > > + memcpy_fromio(bytes + i, tp->mmio_addr + i, 4); > > regs->len is u32. regs->len - 4 should not underflow on normal situation but > it's a bit sloppy. Heh, I forgot about that case. Fixed it in the below patch. By the way, have you observed similar behavior on other hardware? Thanks, Peter --- From: Peter Wu For some reason, my PCIe RTL8111E onboard NIC on a GA-Z68X-UD3H-B3 motherboard reads as FFs when reading from MMIO with a block size larger than 7. Therefore change to reading blocks of four bytes. Signed-off-by: Peter Wu --- drivers/net/ethernet/realtek/r8169.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index b5eb419..d367763 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -1897,12 +1897,19 @@ static void rtl8169_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *p) { struct rtl8169_private *tp = netdev_priv(dev); + char *bytes = p; + int i; if (regs->len > R8169_REGS_SIZE) regs->len = R8169_REGS_SIZE; rtl_lock_work(tp); - memcpy_fromio(p, tp->mmio_addr, regs->len); + if (regs->len >= 4) { + for (i = 0; i < regs->len - 4; i += 4) + memcpy_fromio(bytes + i, tp->mmio_addr + i, 4); + } + if (i < regs->len) + memcpy_fromio(bytes + i, tp->mmio_addr + i, regs->len - i); rtl_unlock_work(tp); }