From owner-svn-src-stable@FreeBSD.ORG Mon Jun 17 14:56:50 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 8B29D318; Mon, 17 Jun 2013 14:56:50 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 646B61C24; Mon, 17 Jun 2013 14:56:50 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r5HEuolp021612; Mon, 17 Jun 2013 14:56:50 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r5HEuoNv021611; Mon, 17 Jun 2013 14:56:50 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201306171456.r5HEuoNv021611@svn.freebsd.org> From: Alexander Motin Date: Mon, 17 Jun 2013 14:56:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org Subject: svn commit: r251851 - stable/8/sys/dev/mvs X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Jun 2013 14:56:50 -0000 Author: mav Date: Mon Jun 17 14:56:49 2013 New Revision: 251851 URL: http://svnweb.freebsd.org/changeset/base/251851 Log: MFC r251661: Replicate r242422 from ata(4) to mvs(4): Only four specific ATA PIO commands transfer several sectors per DRQ block (interrupt). All other ATA PIO commands transfer one sector or 512 bytes at one time. Hardcode these exceptions in mvs(4). This fixes timeout of READ LOG EXT command used by `smartctl -x /dev/adaX`. Also it fixes timeout of DOWNLOAD_MICROCODE on `camcontrol fwdownload`. Modified: stable/8/sys/dev/mvs/mvs.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/dev/ (props changed) stable/8/sys/dev/mvs/ (props changed) Modified: stable/8/sys/dev/mvs/mvs.c ============================================================================== --- stable/8/sys/dev/mvs/mvs.c Mon Jun 17 14:55:02 2013 (r251850) +++ stable/8/sys/dev/mvs/mvs.c Mon Jun 17 14:56:49 2013 (r251851) @@ -893,7 +893,7 @@ mvs_legacy_intr(device_t dev, int poll) if (ccb->ataio.dxfer_len > ch->donecount) { /* Set this transfer size according to HW capabilities */ ch->transfersize = min(ccb->ataio.dxfer_len - ch->donecount, - ch->curr[ccb->ccb_h.target_id].bytecount); + ch->transfersize); /* If data write command - put them */ if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_OUT) { if (mvs_wait(dev, ATA_S_DRQ, ATA_S_BUSY, 1000) < 0) { @@ -1343,8 +1343,14 @@ mvs_legacy_execute_transaction(struct mv return; } ch->donecount = 0; - ch->transfersize = min(ccb->ataio.dxfer_len, - ch->curr[port].bytecount); + if (ccb->ataio.cmd.command == ATA_READ_MUL || + ccb->ataio.cmd.command == ATA_READ_MUL48 || + ccb->ataio.cmd.command == ATA_WRITE_MUL || + ccb->ataio.cmd.command == ATA_WRITE_MUL48) { + ch->transfersize = min(ccb->ataio.dxfer_len, + ch->curr[port].bytecount); + } else + ch->transfersize = min(ccb->ataio.dxfer_len, 512); if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE) ch->fake_busy = 1; /* If data write command - output the data */