Re: How to fix CHECK warning: testing a 'safe expression' ?

From: Murali Karicheri
Date: Thu Dec 18 2014 - 12:45:34 EST


On 12/17/2014 09:39 PM, Christopher Li wrote:
On Thu, Dec 18, 2014 at 6:37 AM, Murali Karicheri<m-karicheri2@xxxxxx> wrote:
if (!ks_pcie) {
dev_err(dev, "no memory for keystone pcie\n");
return -ENOMEM;
}
pp =&ks_pcie->pp;

/* initialize SerDes Phy if present */
phy = devm_phy_get(dev, "pcie-phy");
===> if (!IS_ERR_OR_NULL(phy)) {
ret = phy_init(phy);
if (ret< 0)
return ret;


Hi,

Do you have a smaller stand alone test case which I can reproduce with sparse?

Thanks

Chris
Thanks Chris for responding.

You could add this piece of code for testing

struct foo {
int x;
int y;
};

static struct foo *func1(struct device *dev)
{
struct foo *fp;

fp = devm_kzalloc(dev, sizeof(*fp), GFP_KERNEL);
if (fp == NULL)
return ERR_PTR(-ENOMEM);
return fp;
}

And in one of your module in kernel add

struct foo *fp;

if (IS_ERR_OR_NULL(fp))
return -ENOMEM;

and do

make C=2 CF="-D__CHECK_ENDIAN__" CHECK=sparse

You will see the CHECK warning against your module as

include/linux/err.h:40:16: warning: testing a 'safe expression'

Hope this helps.

--
Murali Karicheri
Linux Kernel, Texas Instruments
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/