Re: *** GMX Spamverdacht *** re: mmc: sh_mmcif: remove now superfluous sh_mmcif_host::data member

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Dan,

On Wed, 6 Nov 2013, Dan Carpenter wrote:

> Hello Guennadi Liakhovetski,
> 
> This is a semi-automatic email about new static checker warnings.
> 
> The patch 699834045f1e: "mmc: sh_mmcif: remove now superfluous 
> sh_mmcif_host::data member" from Dec 26, 2011, leads to the following 
> Smatch complaint:
> 
> drivers/mmc/host/sh_mmcif.c:822 sh_mmcif_set_cmd()
> 	 error: we previously assumed 'data' could be null (see line 787)
> 
> drivers/mmc/host/sh_mmcif.c
>    786		/* WDAT / DATW */
>    787		if (data) {
>                     ^^^^
> Check.
> 
>    788			tmp |= CMD_SET_WDAT;
>    789			switch (host->bus_width) {
>    790			case MMC_BUS_WIDTH_1:
>    791				tmp |= CMD_SET_DATW_1;
>    792				break;
>    793			case MMC_BUS_WIDTH_4:
>    794				tmp |= CMD_SET_DATW_4;
>    795				break;
>    796			case MMC_BUS_WIDTH_8:
>    797				tmp |= CMD_SET_DATW_8;
>    798				break;
>    799			default:
>    800				dev_err(&host->pd->dev, "Unsupported bus width.\n");
>    801				break;
>    802			}
>    803			switch (host->timing) {
>    804			case MMC_TIMING_UHS_DDR50:
>    805				/*
>    806				 * MMC core will only set this timing, if the host
>    807				 * advertises the MMC_CAP_UHS_DDR50 capability. MMCIF
>    808				 * implementations with this capability, e.g. sh73a0,
>    809				 * will have to set it in their platform data.
>    810				 */
>    811				tmp |= CMD_SET_DARS;
>    812				break;
>    813			}
>    814		}
>    815		/* DWEN */
>    816		if (opc == MMC_WRITE_BLOCK || opc == MMC_WRITE_MULTIPLE_BLOCK)
>    817			tmp |= CMD_SET_DWEN;
>    818		/* CMLTE/CMD12EN */
>    819		if (opc == MMC_READ_MULTIPLE_BLOCK || opc == MMC_WRITE_MULTIPLE_BLOCK) {
>    820			tmp |= CMD_SET_CMLTE | CMD_SET_CMD12EN;
>    821			sh_mmcif_bitset(host, MMCIF_CE_BLOCK_SET,
>    822					data->blocks << 16);
>                                         ^^^^^^^^^^^^
> Dereference.
> 
> We used to assume that host->data might be NULL but that mrq->data was
> a valid pointer.  But now they are unified into one pointer.

Yes, formally this isn't correct, but in practice this is valid, because 
for those two opcodes, handled in this "if" data cannot be NULL.

Thanks
Guennadi

> 
>    823		}
>    824		/* RIDXC[1:0] check bits */
> 
> regards,
> dan carpenter
> 

---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux