From mboxrd@z Thu Jan 1 00:00:00 1970 From: bugzilla-daemon@bugzilla.kernel.org Subject: [Bug 14242] MPT SAS Fails on heavy operations Date: Wed, 30 Sep 2009 23:29:25 GMT Message-ID: <200909302329.n8UNTP0X016141@demeter.kernel.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Return-path: Received: from demeter.kernel.org ([140.211.167.39]:43006 "EHLO demeter.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754995AbZI3X3V convert rfc822-to-8bit (ORCPT ); Wed, 30 Sep 2009 19:29:21 -0400 Received: from demeter.kernel.org (localhost.localdomain [127.0.0.1]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n8UNTPBS016142 for ; Wed, 30 Sep 2009 23:29:25 GMT In-Reply-To: Sender: linux-scsi-owner@vger.kernel.org List-Id: linux-scsi@vger.kernel.org To: linux-scsi@vger.kernel.org http://bugzilla.kernel.org/show_bug.cgi?id=3D14242 --- Comment #2 from Denys Fedoryshchenko 2= 009-09-30 23:29:24 --- If i just copy fusion directory from previous kernel it works. Most probably changes what trigger that is (just diff between kernels): +static void +mpt_add_sge_64bit(void *pAddr, u32 flagslength, dma_addr_t dma_addr) +{ + SGESimple64_t *pSge =3D (SGESimple64_t *) pAddr; + pSge->Address.Low =3D cpu_to_le32 + (lower_32_bits((unsigned long)(dma_addr))); + pSge->Address.High =3D cpu_to_le32 + (upper_32_bits((unsigned long)dma_addr)); + pSge->FlagsLength =3D cpu_to_le32 + ((flagslength | MPT_SGE_FLAGS_64_BIT_ADDRESSING= )); +} - } else { - SGESimple32_t *pSge =3D (SGESimple32_t *) pAddr; - pSge->FlagsLength =3D cpu_to_le32(flagslength); - pSge->Address =3D cpu_to_le32(dma_addr); +/** + * mpt_add_sge_64bit_1078 - Place a simple 64 bit SGE at address p= Addr (1078 workaround). + * @pAddr: virtual address for SGE + * @flagslength: SGE flags and data transfer length + * @dma_addr: Physical address + * + * This routine places a MPT request frame back on the MPT adapter= 's + * FreeQ. + **/ +static void +mpt_add_sge_64bit_1078(void *pAddr, u32 flagslength, dma_addr_t dma_ad= dr) +{ + SGESimple64_t *pSge =3D (SGESimple64_t *) pAddr; + u32 tmp; + + pSge->Address.Low =3D cpu_to_le32 + (lower_32_bits((unsigned long)(dma_addr))); + tmp =3D (u32)(upper_32_bits((unsigned long)dma_addr)); + =46ollowing patch in upstream (but not in latest stable kernel) seems f= ixing my issue. Probably it must be pushed to stable kernels? commit=C2=A0=C2=A0c55b89fba9872ebcd5ac15cdfdad29ffb89329f0 [SCSI] mptsas : PAE Kernel more than 4 GB kernel panic This patch is solving problem for PAE kernel DMA operation. On PAE system dma_addr and unsigned long will have different values. Now dma_addr is not type casted using unsigned long. --=20 Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=3Demail ------- You are receiving this mail because: ------- You are watching the assignee of the bug.-- To unsubscribe from this list: send the line "unsubscribe linux-scsi" i= n the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html