lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 11 Jun 2015 15:43:06 -0700 (PDT)
From:	David Miller <davem@...emloft.net>
To:	noamc@...hip.com
Cc:	netdev@...r.kernel.org, linux-kernel@...r.kernel.org,
	Alexey.Brodkin@...opsys.com, vgupta@...opsys.com,
	giladb@...hip.com, cmetcalf@...hip.com, talz@...hip.com
Subject: Re: [PATCH v2] NET: Add ezchip ethernet driver

From: Noam Camus <noamc@...hip.com>
Date: Thu, 11 Jun 2015 11:33:49 +0300

> +#define NPS_ENET_INT_MASK		(sizeof(u32) - 1)
> +#define NPS_ENET_INT_OFFSET		2
> +#define NPS_ENET_WORDS_NUM(length)	((length + NPS_ENET_INT_MASK) >> 2)

This is a bit obfuscating in my opinion.

First of all "NPS_ENET_INT_OFFSET" is not an "offset", which you would
add or subtract from a value, but rather it is a "shift".  All of
the uses would look clearer as "X / sizeof(u32)" rather than the
"X >> NPS_ENET_INET_OFFSET".

Same for NPS_ENET_WORDS_NUM(), this is simply "DIV_ROUND_UP(x, sizeof_u32))"
which is much more easy to understand.

And I would just say "sizeof(u32) - 1" outright for the mask as well.

So basically what I'm saying is that these macros make the code harder
to read and understand rather than making it easier.

> +
> +			/* to accommodate word-unaligned address of "reg"
> +			 * we have to do memcpy() instead of simple "="
> +			 */
> +			memcpy(reg, &buf, sizeof(buf));

This is not guaranteed to work.  'ret' is a "u32 *" type therefore the
compiler is allowed to assume the pointer is properly aligned and
therefore emit a 32-bit load/store sequence inline for the memcpy()
call.

Which means all of this unaligned handling code is going to accomplish
nothing at all.  The code will still make unaligned accesses.

> +	netif_rx(skb);

Please implement proper NAPI support for your driver so that receive
packets are processed via the ->poll() handler in software interrupt
context rather than via netif_rx() in hardware interrupt context.

> +static void nps_enet_tx_irq_handler(struct net_device *netdev,
> +				    struct nps_enet_tx_ctl tx_ctrl)
> +{

Likewise for TX completion handling.
> +static struct net_device_stats *nps_enet_get_stats(struct net_device *ndev)
> +{
> +	return &ndev->stats;
> +}

If this is all that your get_stats() method does, you can leave it unspecified
in nps_netdev_ops, and the core code will do the right thing by default.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ