[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20201208045050.GA9609@andrea>
Date: Tue, 8 Dec 2020 05:50:50 +0100
From: Andrea Parri <parri.andrea@...il.com>
To: Michael Kelley <mikelley@...rosoft.com>
Cc: "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
KY Srinivasan <kys@...rosoft.com>,
Haiyang Zhang <haiyangz@...rosoft.com>,
Stephen Hemminger <sthemmin@...rosoft.com>,
Wei Liu <wei.liu@...nel.org>,
"linux-hyperv@...r.kernel.org" <linux-hyperv@...r.kernel.org>,
Andres Beltran <lkmlabelt@...il.com>,
Saruhan Karademir <skarade@...rosoft.com>,
Juan Vazquez <juvazq@...rosoft.com>,
"David S. Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>,
"James E.J. Bottomley" <jejb@...ux.ibm.com>,
"Martin K. Petersen" <martin.petersen@...cle.com>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>,
"linux-scsi@...r.kernel.org" <linux-scsi@...r.kernel.org>
Subject: Re: [PATCH v2] Drivers: hv: vmbus: Copy packets sent by Hyper-V out
of the ring buffer
> > @@ -419,17 +446,52 @@ static u32 hv_pkt_iter_avail(const struct hv_ring_buffer_info *rbi)
> > struct vmpacket_descriptor *hv_pkt_iter_first(struct vmbus_channel *channel)
> > {
> > struct hv_ring_buffer_info *rbi = &channel->inbound;
> > - struct vmpacket_descriptor *desc;
> > + struct vmpacket_descriptor *desc, *desc_copy;
> > + u32 bytes_avail, pkt_len, pkt_offset;
> >
> > - hv_debug_delay_test(channel, MESSAGE_DELAY);
> > - if (hv_pkt_iter_avail(rbi) < sizeof(struct vmpacket_descriptor))
> > + desc = hv_pkt_iter_first_raw(channel);
> > + if (!desc)
> > return NULL;
> >
> > - desc = hv_get_ring_buffer(rbi) + rbi->priv_read_index;
> > - if (desc)
> > - prefetch((char *)desc + (desc->len8 << 3));
> > + bytes_avail = hv_pkt_iter_avail(rbi);
> > +
> > + /*
> > + * Ensure the compiler does not use references to incoming Hyper-V values (which
> > + * could change at any moment) when reading local variables later in the code
> > + */
> > + pkt_len = READ_ONCE(desc->len8) << 3;
> > + pkt_offset = READ_ONCE(desc->offset8) << 3;
> > +
> > + /*
> > + * If pkt_len is invalid, set it to the smaller of hv_pkt_iter_avail() and
> > + * rbi->pkt_buffer_size
> > + */
> > + if (rbi->pkt_buffer_size < bytes_avail)
> > + bytes_avail = rbi->pkt_buffer_size;
>
> I think the above could be combined with the earlier call to hv_pkt_iter_avail(),
> and more logically expressed as:
>
> bytes_avail = min(rbi->pkt_buffer_size, hv_pkt_iter_avail(rbi));
>
>
> This is a minor nit. Everything else in this patch looks good to me.
Thanks for the feedback, Michael; I'll send v3 to address it shortly.
Andrea
Powered by blists - more mailing lists