From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758112Ab3GWVAK (ORCPT ); Tue, 23 Jul 2013 17:00:10 -0400 Received: from bedivere.hansenpartnership.com ([66.63.167.143]:33728 "EHLO bedivere.hansenpartnership.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758080Ab3GWVAI (ORCPT ); Tue, 23 Jul 2013 17:00:08 -0400 Message-ID: <1374613204.2290.49.camel@dabdike> Subject: Re: [PATCH] mvsas: fix unaligned-access kernel panic under heavy disk testing From: James Bottomley To: Chris Metcalf Cc: Jianpeng Ma , Greg Kroah-Hartman , Xi Wang , Xiangliang Yu , linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Date: Tue, 23 Jul 2013 14:00:04 -0700 In-Reply-To: <201307232053.r6NKrkOh032171@farm-0012.internal.tilera.com> References: <201307232053.r6NKrkOh032171@farm-0012.internal.tilera.com> Content-Type: text/plain; charset="ISO-8859-15" X-Mailer: Evolution 3.8.3 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 2013-07-23 at 16:50 -0400, Chris Metcalf wrote: > The slot->response value may not be aligned, so should be read > using the appropriate kernel "unaligned" accessor. Hm, institutional memory re-presenting the wrong patch? However, I am reminded to push the right one in spite of no ack from marvell. James > Signed-off-by: Chris Metcalf > --- > drivers/scsi/mvsas/mv_sas.c | 5 +++-- > drivers/scsi/mvsas/mv_sas.h | 1 + > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c > index f14665a..66aaa87 100644 > --- a/drivers/scsi/mvsas/mv_sas.c > +++ b/drivers/scsi/mvsas/mv_sas.c > @@ -1858,10 +1858,11 @@ int mvs_slot_complete(struct mvs_info *mvi, u32 rx_desc, u32 flags) > } > > /* error info record present */ > - if (unlikely((rx_desc & RXQ_ERR) && (*(u64 *) slot->response))) { > + if (unlikely((rx_desc & RXQ_ERR) && > + get_unaligned_le64((u64 *) slot->response))) { > mv_dprintk("port %d slot %d rx_desc %X has error info" > "%016llX.\n", slot->port->sas_port.id, slot_idx, > - rx_desc, (u64)(*(u64 *)slot->response)); > + rx_desc, get_unaligned_le64((u64 *)slot->response)); > tstat->stat = mvs_slot_err(mvi, task, slot_idx); > tstat->resp = SAS_TASK_COMPLETE; > goto out; > diff --git a/drivers/scsi/mvsas/mv_sas.h b/drivers/scsi/mvsas/mv_sas.h > index 60e2fb7..d6b19dc 100644 > --- a/drivers/scsi/mvsas/mv_sas.h > +++ b/drivers/scsi/mvsas/mv_sas.h > @@ -39,6 +39,7 @@ > #include > #include > #include > +#include > #include > #include > #include