From 6fd14eb9401ff298e17c21fb5d367ec622cc7518 Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Fri, 5 Aug 2016 08:57:51 +0000 Subject: [PATCH] hyperv/vmbus: Only make sure the TX bufring will not be closed. KVP can write data, whose size is > 1/2 TX bufring size. MFC after: 1 week Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D7414 --- sys/dev/hyperv/vmbus/vmbus_brvar.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sys/dev/hyperv/vmbus/vmbus_brvar.h b/sys/dev/hyperv/vmbus/vmbus_brvar.h index bdc7e6709c4..da0ca9d8f53 100644 --- a/sys/dev/hyperv/vmbus/vmbus_brvar.h +++ b/sys/dev/hyperv/vmbus/vmbus_brvar.h @@ -74,8 +74,12 @@ struct sysctl_oid; static __inline int vmbus_txbr_maxpktsz(const struct vmbus_txbr *tbr) { - /* 1/2 data size */ - return (tbr->txbr_dsize / 2); + /* + * - 64 bits for the trailing start index (- sizeof(uint64_t)). + * - The rindex and windex can't be same (- 1). See + * the comment near vmbus_bufring.br_{r,w}index. + */ + return (tbr->txbr_dsize - sizeof(uint64_t) - 1); } void vmbus_br_sysctl_create(struct sysctl_ctx_list *ctx,