From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiner Kallweit Subject: Re: [PATCH] mmc: sdio: fix alignment issue in struct sdio_func Date: Wed, 29 Mar 2017 22:40:02 +0200 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 7bit Return-path: Received: from mail-wr0-f194.google.com ([209.85.128.194]:33927 "EHLO mail-wr0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932715AbdC2UkS (ORCPT ); Wed, 29 Mar 2017 16:40:18 -0400 Received: by mail-wr0-f194.google.com with SMTP id w43so6372662wrb.1 for ; Wed, 29 Mar 2017 13:40:16 -0700 (PDT) In-Reply-To: Sender: linux-mmc-owner@vger.kernel.org List-Id: linux-mmc@vger.kernel.org To: Kevin Hilman Cc: Ulf Hansson , linux-amlogic@lists.infradead.org, Helmut Klein , "linux-mmc@vger.kernel.org" Am 29.03.2017 um 22:17 schrieb Kevin Hilman: > Heiner Kallweit writes: > >> Certain 64-bit systems (e.g. Amlogic Meson GX) require buffers to be >> used for DMA to be 8-byte-aligned. struct sdio_func has an embedded >> small DMA buffer not meeting this requirement. >> When testing switching to descriptor chain mode in meson-gx driver >> SDIO is broken therefore. Fix this by allocating the small DMA buffer >> separately as kmalloc ensures that the returned memory area is >> properly aligned for every basic data type. >> >> Signed-off-by: Heiner Kallweit >> Tested-by: Helmut Klein > > This should work too, without the need to do a tiny kmalloc. > > diff --git a/include/linux/mmc/sdio_func.h b/include/linux/mmc/sdio_func.h > index aab032a6ae61..071addf23931 100644 > --- a/include/linux/mmc/sdio_func.h > +++ b/include/linux/mmc/sdio_func.h > @@ -53,7 +53,7 @@ struct sdio_func { > unsigned int state; /* function state */ > #define SDIO_STATE_PRESENT (1<<0) /* present in sysfs */ > > - u8 tmpbuf[4]; /* DMA:able scratch buffer */ > + u8 tmpbuf[4] __aligned(8); /* DMA:able scratch buffer */ > Yes, that's possible too. Actually I wasn't 100% sure whether the alignment is applied to each member of the array or the array itself. But after a small test it seems to be applied to the array. So let's go with this version, thanks for the hint. Heiner > unsigned num_info; /* number of info strings */ > const char **info; /* info strings */ > > Kevin >