Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 Jul 2025 19:33:41 GMT
From:      Jessica Clarke <jrtc27@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: cb75bb51261b - main - vmbus: Avoid gratuitous ifdef and use more generic implementation instead
Message-ID:  <202507101933.56AJXfOn059090@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by jrtc27:

URL: https://cgit.FreeBSD.org/src/commit/?id=cb75bb51261b13a49636befdee1c4a76f2e9013e

commit cb75bb51261b13a49636befdee1c4a76f2e9013e
Author:     Jessica Clarke <jrtc27@FreeBSD.org>
AuthorDate: 2025-07-10 19:33:33 +0000
Commit:     Jessica Clarke <jrtc27@FreeBSD.org>
CommitDate: 2025-07-10 19:33:33 +0000

    vmbus: Avoid gratuitous ifdef and use more generic implementation instead
    
    Checking for __LP64__ is non-portable as it assumes that ILP32 and LP64
    are the only two ABIs that exist, but CheriBSD supports an additional
    ABI where long is still 64-bit but pointers are 128-bit capabilities,
    and thus __LP64__ is not defined. We could change this to check the
    value of __SIZEOF_LONG__, since the code here only cares about that
    aspect of the ABI, however in this instance, the only real reason an
    ifdef is used at all is to be able to get log2(sizeof(u_long)), but if
    we instead multiply and divide rather than shift, and let the compiler
    optimise that to a shift, we can just use sizeof(u_long) instead. Note
    also that VMBUS_EVTFLAGS_MAX could always just have been defined as
    VMBUS_EVTFLAGS_SIZE / sizeof(u_long).
    
    Reviewed by:    jhb
    Differential Revision:  https://reviews.freebsd.org/D50630
---
 sys/dev/hyperv/vmbus/vmbus_chan.c |  6 +++---
 sys/dev/hyperv/vmbus/vmbus_reg.h  | 10 ++--------
 2 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/sys/dev/hyperv/vmbus/vmbus_chan.c b/sys/dev/hyperv/vmbus/vmbus_chan.c
index 189a3e66a039..7ea60a499c72 100644
--- a/sys/dev/hyperv/vmbus/vmbus_chan.c
+++ b/sys/dev/hyperv/vmbus/vmbus_chan.c
@@ -1555,7 +1555,7 @@ vmbus_event_flags_proc(struct vmbus_softc *sc, volatile u_long *event_flags,
 			continue;
 
 		flags = atomic_swap_long(&event_flags[f], 0);
-		chid_base = f << VMBUS_EVTFLAG_SHIFT;
+		chid_base = f * VMBUS_EVTFLAG_LEN;
 
 		while ((chid_ofs = ffsl(flags)) != 0) {
 			struct vmbus_channel *chan;
@@ -1599,7 +1599,7 @@ vmbus_event_proc_compat(struct vmbus_softc *sc, int cpu)
 	eventf = VMBUS_PCPU_GET(sc, event_flags, cpu) + VMBUS_SINT_MESSAGE;
 	if (atomic_testandclear_long(&eventf->evt_flags[0], 0)) {
 		vmbus_event_flags_proc(sc, sc->vmbus_rx_evtflags,
-		    VMBUS_CHAN_MAX_COMPAT >> VMBUS_EVTFLAG_SHIFT);
+		    VMBUS_CHAN_MAX_COMPAT / VMBUS_EVTFLAG_LEN);
 	}
 }
 
@@ -1903,7 +1903,7 @@ vmbus_chan_msgproc_choffer(struct vmbus_softc *sc,
 	 * Setup event flag.
 	 */
 	chan->ch_evtflag =
-	    &sc->vmbus_tx_evtflags[chan->ch_id >> VMBUS_EVTFLAG_SHIFT];
+	    &sc->vmbus_tx_evtflags[chan->ch_id / VMBUS_EVTFLAG_LEN];
 	chan->ch_evtflag_mask = 1UL << (chan->ch_id & VMBUS_EVTFLAG_MASK);
 
 	/*
diff --git a/sys/dev/hyperv/vmbus/vmbus_reg.h b/sys/dev/hyperv/vmbus/vmbus_reg.h
index 4aa729475b5d..76cdca0ebeb2 100644
--- a/sys/dev/hyperv/vmbus/vmbus_reg.h
+++ b/sys/dev/hyperv/vmbus/vmbus_reg.h
@@ -60,16 +60,10 @@ CTASSERT(sizeof(struct vmbus_message) == VMBUS_MSG_SIZE);
  * Hyper-V SynIC event flags
  */
 
-#ifdef __LP64__
-#define VMBUS_EVTFLAGS_MAX	32
-#define VMBUS_EVTFLAG_SHIFT	6
-#else
-#define VMBUS_EVTFLAGS_MAX	64
-#define VMBUS_EVTFLAG_SHIFT	5
-#endif
-#define VMBUS_EVTFLAG_LEN	(1 << VMBUS_EVTFLAG_SHIFT)
+#define VMBUS_EVTFLAG_LEN	(sizeof(u_long) * 8)
 #define VMBUS_EVTFLAG_MASK	(VMBUS_EVTFLAG_LEN - 1)
 #define VMBUS_EVTFLAGS_SIZE	256
+#define VMBUS_EVTFLAGS_MAX	(VMBUS_EVTFLAGS_SIZE / sizeof(u_long))
 
 struct vmbus_evtflags {
 	u_long		evt_flags[VMBUS_EVTFLAGS_MAX];



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202507101933.56AJXfOn059090>