linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] net/fec: check id_entry pointer before using it
@ 2011-03-09  2:50 Jason Liu
  2011-03-09  5:56 ` Shawn Guo
  2011-03-09  8:26 ` Wolfram Sang
  0 siblings, 2 replies; 5+ messages in thread
From: Jason Liu @ 2011-03-09  2:50 UTC (permalink / raw)
  To: linux-arm-kernel

The id_entry will possibly be NULL, So, need check
id_entry and make sure it not NULL before using it.

Signed-off-by: Jason Liu <r64343@freescale.com>
---
 drivers/net/fec.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/net/fec.c b/drivers/net/fec.c
index cd0282d..e97ee0f 100644
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -294,7 +294,7 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
 	 * the system that it's running on. As the result, driver has to
 	 * swap every frame going to and coming from the controller.
 	 */
-	if (id_entry->driver_data & FEC_QUIRK_SWAP_FRAME)
+	if (id_entry && id_entry->driver_data & FEC_QUIRK_SWAP_FRAME)
 		swap_buffer(bufaddr, skb->len);
 
 	/* Save skb pointer */
@@ -530,7 +530,7 @@ fec_enet_rx(struct net_device *dev)
 	        dma_unmap_single(NULL, bdp->cbd_bufaddr, bdp->cbd_datlen,
         			DMA_FROM_DEVICE);
 
-		if (id_entry->driver_data & FEC_QUIRK_SWAP_FRAME)
+		if (id_entry && id_entry->driver_data & FEC_QUIRK_SWAP_FRAME)
 			swap_buffer(data, pkt_len);
 
 		/* This does 16 byte alignment, exactly what we need.
@@ -809,7 +809,7 @@ static int fec_enet_mii_init(struct platform_device *pdev)
 	 * mdio interface in board design, and need to be configured by
 	 * fec0 mii_bus.
 	 */
-	if ((id_entry->driver_data & FEC_QUIRK_ENET_MAC) && pdev->id) {
+	if (id_entry && (id_entry->driver_data & FEC_QUIRK_ENET_MAC) && pdev->id) {
 		/* fec1 uses fec0 mii_bus */
 		fep->mii_bus = fec0_mii_bus;
 		return 0;
@@ -852,7 +852,7 @@ static int fec_enet_mii_init(struct platform_device *pdev)
 		goto err_out_free_mdio_irq;
 
 	/* save fec0 mii_bus */
-	if (id_entry->driver_data & FEC_QUIRK_ENET_MAC)
+	if (id_entry && id_entry->driver_data & FEC_QUIRK_ENET_MAC)
 		fec0_mii_bus = fep->mii_bus;
 
 	return 0;
@@ -1239,7 +1239,7 @@ fec_restart(struct net_device *dev, int duplex)
 	 * enet-mac reset will reset mac address registers too,
 	 * so need to reconfigure it.
 	 */
-	if (id_entry->driver_data & FEC_QUIRK_ENET_MAC) {
+	if (id_entry && id_entry->driver_data & FEC_QUIRK_ENET_MAC) {
 		memcpy(&temp_mac, dev->dev_addr, ETH_ALEN);
 		writel(cpu_to_be32(temp_mac[0]), fep->hwp + FEC_ADDR_LOW);
 		writel(cpu_to_be32(temp_mac[1]), fep->hwp + FEC_ADDR_HIGH);
@@ -1295,7 +1295,7 @@ fec_restart(struct net_device *dev, int duplex)
 	 * The phy interface and speed need to get configured
 	 * differently on enet-mac.
 	 */
-	if (id_entry->driver_data & FEC_QUIRK_ENET_MAC) {
+	if (id_entry && id_entry->driver_data & FEC_QUIRK_ENET_MAC) {
 		val = readl(fep->hwp + FEC_R_CNTRL);
 
 		/* MII or RMII */
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH] net/fec: check id_entry pointer before using it
  2011-03-09  2:50 [PATCH] net/fec: check id_entry pointer before using it Jason Liu
@ 2011-03-09  5:56 ` Shawn Guo
  2011-03-09  8:26 ` Wolfram Sang
  1 sibling, 0 replies; 5+ messages in thread
From: Shawn Guo @ 2011-03-09  5:56 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Jason,

On Wed, Mar 09, 2011 at 10:50:04AM +0800, Jason Liu wrote:
> The id_entry will possibly be NULL, So, need check
> id_entry and make sure it not NULL before using it.
> 
> Signed-off-by: Jason Liu <r64343@freescale.com>
> ---
>  drivers/net/fec.c |   12 ++++++------
>  1 files changed, 6 insertions(+), 6 deletions(-)
> 
You need to cc list: netdev at vger.kernel.org

-- 
Regards,
Shawn

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH] net/fec: check id_entry pointer before using it
  2011-03-09  2:50 [PATCH] net/fec: check id_entry pointer before using it Jason Liu
  2011-03-09  5:56 ` Shawn Guo
@ 2011-03-09  8:26 ` Wolfram Sang
  2011-03-10  2:41   ` Jason Liu
  1 sibling, 1 reply; 5+ messages in thread
From: Wolfram Sang @ 2011-03-09  8:26 UTC (permalink / raw)
  To: linux-arm-kernel

On Wed, Mar 09, 2011 at 10:50:04AM +0800, Jason Liu wrote:
> The id_entry will possibly be NULL, So, need check
> id_entry and make sure it not NULL before using it.

When does it become NULL?

-- 
Pengutronix e.K.                           | Wolfram Sang                |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110309/7a8fd09f/attachment.sig>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH] net/fec: check id_entry pointer before using it
  2011-03-09  8:26 ` Wolfram Sang
@ 2011-03-10  2:41   ` Jason Liu
  2011-03-12 16:11     ` Wolfram Sang
  0 siblings, 1 reply; 5+ messages in thread
From: Jason Liu @ 2011-03-10  2:41 UTC (permalink / raw)
  To: linux-arm-kernel

Hi, Wolfram Sang,

2011/3/9 Wolfram Sang <w.sang@pengutronix.de>:
> On Wed, Mar 09, 2011 at 10:50:04AM +0800, Jason Liu wrote:
>> The id_entry will possibly be NULL, So, need check
>> id_entry and make sure it not NULL before using it.
>
> When does it become NULL?

look at the code:drivers/base/platform.c

static int platform_match(struct device *dev, struct device_driver *drv)
{
        struct platform_device *pdev = to_platform_device(dev);
        struct platform_driver *pdrv = to_platform_driver(drv);

        /* Attempt an OF style match first */
        if (of_driver_match_device(dev, drv))
                return 1;

        /* Then try to match against the id table */
        if (pdrv->id_table)
                return platform_match_id(pdrv->id_table, pdev) != NULL;

        /* fall-back to driver name match */
        return (strcmp(pdev->name, drv->name) == 0);
}

If OF style match first succeed, the function will return and the
pdev->id_entry will not get set and it's NULL.

BR,
Jason

>
> --
> Pengutronix e.K. ? ? ? ? ? ? ? ? ? ? ? ? ? | Wolfram Sang ? ? ? ? ? ? ? ?|
> Industrial Linux Solutions ? ? ? ? ? ? ? ? | http://www.pengutronix.de/ ?|
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
>
> iEYEARECAAYFAk13OZkACgkQD27XaX1/VRsZgwCeKCNK0ufdrV2186pKO3jD9qfI
> HcQAn1zZ+Rmv+rpHHQH9JNyMQitNQdXV
> =Ha2Y
> -----END PGP SIGNATURE-----
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH] net/fec: check id_entry pointer before using it
  2011-03-10  2:41   ` Jason Liu
@ 2011-03-12 16:11     ` Wolfram Sang
  0 siblings, 0 replies; 5+ messages in thread
From: Wolfram Sang @ 2011-03-12 16:11 UTC (permalink / raw)
  To: linux-arm-kernel

On Thu, Mar 10, 2011 at 10:41:37AM +0800, Jason Liu wrote:
> Hi, Wolfram Sang,
> 
> 2011/3/9 Wolfram Sang <w.sang@pengutronix.de>:
> > On Wed, Mar 09, 2011 at 10:50:04AM +0800, Jason Liu wrote:
> >> The id_entry will possibly be NULL, So, need check
> >> id_entry and make sure it not NULL before using it.
> >
> > When does it become NULL?
> 
> look at the code:drivers/base/platform.c
> 
> static int platform_match(struct device *dev, struct device_driver *drv)
> {
>         struct platform_device *pdev = to_platform_device(dev);
>         struct platform_driver *pdrv = to_platform_driver(drv);
> 
>         /* Attempt an OF style match first */
>         if (of_driver_match_device(dev, drv))
>                 return 1;
> 
>         /* Then try to match against the id table */
>         if (pdrv->id_table)
>                 return platform_match_id(pdrv->id_table, pdev) != NULL;
> 
>         /* fall-back to driver name match */
>         return (strcmp(pdev->name, drv->name) == 0);
> }
> 
> If OF style match first succeed, the function will return and the
> pdev->id_entry will not get set and it's NULL.

This is correct. Yet, OF might be interested in using the flags from the
fec-driver, too. If there will be a user (there is none yet), part of the
update patch probably should add something like this to probe:

if (id_entry)
	fec_flags = id_entry->driver_data;
else if (of_id)
	fec_flags = of_id->data;
else
	/* Deal with it... */

Makes sense?

Regards,

   Wolfram

-- 
Pengutronix e.K.                           | Wolfram Sang                |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110312/4b2d6f44/attachment.sig>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-03-12 16:11 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-09  2:50 [PATCH] net/fec: check id_entry pointer before using it Jason Liu
2011-03-09  5:56 ` Shawn Guo
2011-03-09  8:26 ` Wolfram Sang
2011-03-10  2:41   ` Jason Liu
2011-03-12 16:11     ` Wolfram Sang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).