Patchwork Bug fix in commit 178db7d3 triggered a bug in the SPI driver for MPC83XX (pdata is NULL).

login
register
mail settings
Submitter Kenth Eriksson
Date March 30, 2012, 3:05 p.m.
Message ID <1333119930-21129-1-git-send-email-kenth.eriksson@transmode.com>
Download mbox | patch
Permalink /patch/149801/
State Not Applicable
Headers show

Comments

Kenth Eriksson - March 30, 2012, 3:05 p.m.
After commit 178db7d3 devices are initialized as children of the bus master, not children of the bus masters parent device. The pdata pointer used in fsl_spi_chipselect must updated to reflect the changed initialization.

Signed-off-by: Kenth Eriksson <kenth.eriksson@transmode.com>
---
 drivers/spi/spi-fsl-spi.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)
Grant Likely - March 30, 2012, 10:25 p.m.
On Fri, 30 Mar 2012 17:05:30 +0200, Kenth Eriksson <kenth.eriksson@transmode.com> wrote:
> After commit 178db7d3 devices are initialized as children of the bus master, not children of the bus masters parent device. The pdata pointer used in fsl_spi_chipselect must updated to reflect the changed initialization.
> 
> Signed-off-by: Kenth Eriksson <kenth.eriksson@transmode.com>

Applied; but I have a comments on your commit text.

SHA1 id's are great for looking up commits, but they don't help at all
for casual readers on the mailing list or doing web searches.  Please
always include the commit title when referencing an earlier commit.  I
had to edit the commit text.  Here is what I changed it to:

    spi/mpc83xx: fix NULL pdata dereference bug
    
    Commit 178db7d3, "spi: Fix device unregistration when unregistering
    the bus master", changed device initialization to be children of the
    bus master, not children of the bus masters parent device. The pdata
    pointer used in fsl_spi_chipselect must updated to reflect the changed
    initialization.

g.

> ---
>  drivers/spi/spi-fsl-spi.c |    4 +++-
>  1 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c
> index 7d6ca68..dc747a0 100644
> --- a/drivers/spi/spi-fsl-spi.c
> +++ b/drivers/spi/spi-fsl-spi.c
> @@ -139,10 +139,12 @@ static void fsl_spi_change_mode(struct spi_device *spi)
>  static void fsl_spi_chipselect(struct spi_device *spi, int value)
>  {
>  	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
> -	struct fsl_spi_platform_data *pdata = spi->dev.parent->platform_data;
> +	struct fsl_spi_platform_data *pdata;
>  	bool pol = spi->mode & SPI_CS_HIGH;
>  	struct spi_mpc8xxx_cs	*cs = spi->controller_state;
>  
> +	pdata = spi->dev.parent->parent->platform_data;
> +
>  	if (value == BITBANG_CS_INACTIVE) {
>  		if (pdata->cs_control)
>  			pdata->cs_control(spi, !pol);
> -- 
> 1.7.3.4
> 
> 
> ------------------------------------------------------------------------------
> This SF email is sponsosred by:
> Try Windows Azure free for 90 days Click Here 
> http://p.sf.net/sfu/sfd2d-msazure
> _______________________________________________
> spi-devel-general mailing list
> spi-devel-general@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/spi-devel-general

Patch

diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c
index 7d6ca68..dc747a0 100644
--- a/drivers/spi/spi-fsl-spi.c
+++ b/drivers/spi/spi-fsl-spi.c
@@ -139,10 +139,12 @@  static void fsl_spi_change_mode(struct spi_device *spi)
 static void fsl_spi_chipselect(struct spi_device *spi, int value)
 {
 	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
-	struct fsl_spi_platform_data *pdata = spi->dev.parent->platform_data;
+	struct fsl_spi_platform_data *pdata;
 	bool pol = spi->mode & SPI_CS_HIGH;
 	struct spi_mpc8xxx_cs	*cs = spi->controller_state;
 
+	pdata = spi->dev.parent->parent->platform_data;
+
 	if (value == BITBANG_CS_INACTIVE) {
 		if (pdata->cs_control)
 			pdata->cs_control(spi, !pol);