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] [day] [month] [year] [list]
Date:   Wed, 8 Mar 2023 15:07:04 +0100
From:   Stefano Garzarella <sgarzare@...hat.com>
To:     Christophe JAILLET <christophe.jaillet@...adoo.fr>
Cc:     "Michael S. Tsirkin" <mst@...hat.com>,
        Jason Wang <jasowang@...hat.com>, linux-kernel@...r.kernel.org,
        kernel-janitors@...r.kernel.org,
        virtualization@...ts.linux-foundation.org
Subject: Re: [PATCH] virtio: Reorder fields in 'struct virtqueue'

On Sat, Feb 18, 2023 at 09:10:31AM +0100, Christophe JAILLET wrote:
>Group some variables based on their sizes to reduce hole and avoid padding.
>On x86_64, this shrinks the size of 'struct virtqueue'
>from 72 to 68 bytes.
>
>It saves a few bytes of memory.
>
>Signed-off-by: Christophe JAILLET <christophe.jaillet@...adoo.fr>
>---

LGTM!

Reviewed-by: Stefano Garzarella <sgarzare@...hat.com>

>Using pahole
>
>Before:
>======
>struct virtqueue {
>	struct list_head           list;                 /*     0    16 */
>	void                       (*callback)(struct virtqueue *); /*    16     8 */
>	const char  *              name;                 /*    24     8 */
>	struct virtio_device *     vdev;                 /*    32     8 */
>	unsigned int               index;                /*    40     4 */
>	unsigned int               num_free;             /*    44     4 */
>	unsigned int               num_max;              /*    48     4 */
>
>	/* XXX 4 bytes hole, try to pack */
>
>	void *                     priv;                 /*    56     8 */
>	/* --- cacheline 1 boundary (64 bytes) --- */
>	bool                       reset;                /*    64     1 */
>
>	/* size: 72, cachelines: 2, members: 9 */
>	/* sum members: 61, holes: 1, sum holes: 4 */
>	/* padding: 7 */
>	/* last cacheline: 8 bytes */
>};
>
>After:
>=====
>struct virtqueue {
>	struct list_head           list;                 /*     0    16 */
>	void                       (*callback)(struct virtqueue *); /*    16     8 */
>	const char  *              name;                 /*    24     8 */
>	struct virtio_device *     vdev;                 /*    32     8 */
>	unsigned int               index;                /*    40     4 */
>	unsigned int               num_free;             /*    44     4 */
>	unsigned int               num_max;              /*    48     4 */
>	bool                       reset;                /*    52     1 */
>
>	/* XXX 3 bytes hole, try to pack */
>
>	void *                     priv;                 /*    56     8 */
>
>	/* size: 64, cachelines: 1, members: 9 */
>	/* sum members: 61, holes: 1, sum holes: 3 */
>};
>---
> include/linux/virtio.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>diff --git a/include/linux/virtio.h b/include/linux/virtio.h
>index 6ac2655500dc..9439ae898310 100644
>--- a/include/linux/virtio.h
>+++ b/include/linux/virtio.h
>@@ -35,8 +35,8 @@ struct virtqueue {
> 	unsigned int index;
> 	unsigned int num_free;
> 	unsigned int num_max;
>-	void *priv;
> 	bool reset;
>+	void *priv;
> };
>
> int virtqueue_add_outbuf(struct virtqueue *vq,
>-- 
>2.34.1
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ