From patchwork Thu Jun 20 04:14:27 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Steven J. Hill" X-Patchwork-Id: 252720 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 5F4D52C029B for ; Thu, 20 Jun 2013 14:54:58 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751265Ab3FTEy5 (ORCPT ); Thu, 20 Jun 2013 00:54:57 -0400 Received: from home.bethel-hill.org ([63.228.164.32]:59622 "EHLO home.bethel-hill.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751065Ab3FTEy4 (ORCPT ); Thu, 20 Jun 2013 00:54:56 -0400 X-Greylist: delayed 2399 seconds by postgrey-1.27 at vger.kernel.org; Thu, 20 Jun 2013 00:54:56 EDT Received: by home.bethel-hill.org with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.72) (envelope-from ) id 1UpWGq-0002vf-Ra; Wed, 19 Jun 2013 23:14:52 -0500 From: "Steven J. Hill" To: "David S . Miller" Cc: Leonid Yegoshin , linux-ide@vger.kernel.org Subject: [PATCH] ide: Fix IDE PIO size calculation Date: Wed, 19 Jun 2013 23:14:27 -0500 Message-Id: <1371701667-3908-1-git-send-email-Steven.Hill@imgtec.com> X-Mailer: git-send-email 1.7.9.5 Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org From: Leonid Yegoshin IDE PIO calculates the size wrong when passing the parameter "ide-core.nodma=0.0" to the kernel. Change-Id: Id82c2bc5965d85960846db53d84846d9a05d75a3 Signed-off-by: Leonid Yegoshin Acked-by: Steven J. Hill --- drivers/ide/ide-taskfile.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c index 729428e..dabb88b 100644 --- a/drivers/ide/ide-taskfile.c +++ b/drivers/ide/ide-taskfile.c @@ -239,9 +239,6 @@ void ide_pio_bytes(ide_drive_t *drive, struct ide_cmd *cmd, unsigned nr_bytes = min(len, cursg->length - cmd->cursg_ofs); int page_is_high; - if (nr_bytes > PAGE_SIZE) - nr_bytes = PAGE_SIZE; - page = sg_page(cursg); offset = cursg->offset + cmd->cursg_ofs; @@ -249,6 +246,8 @@ void ide_pio_bytes(ide_drive_t *drive, struct ide_cmd *cmd, page = nth_page(page, (offset >> PAGE_SHIFT)); offset %= PAGE_SIZE; + nr_bytes = min_t(unsigned, nr_bytes, (PAGE_SIZE - offset)); + page_is_high = PageHighMem(page); if (page_is_high) local_irq_save(flags);