diff --git a/SOURCES/openvswitch-3.2.0.patch b/SOURCES/openvswitch-3.2.0.patch
index d69d6af..833c56a 100644
--- a/SOURCES/openvswitch-3.2.0.patch
+++ b/SOURCES/openvswitch-3.2.0.patch
@@ -3381,7 +3381,7 @@ index bdd12f6a7b..ac72a44bce 100644
  
      <p>
 diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
-index 8f1361e21f..fe82d6dd02 100644
+index 8f1361e21f..3e47961a56 100644
 --- a/lib/netdev-dpdk.c
 +++ b/lib/netdev-dpdk.c
 @@ -1312,6 +1312,16 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev)
@@ -3480,6 +3480,53 @@ index 8f1361e21f..fe82d6dd02 100644
      }
  
      while (nb_tx != nb_tx_prep) {
+@@ -4320,10 +4361,11 @@ netdev_dpdk_get_mempool_info(struct unixctl_conn *conn,
+                              int argc, const char *argv[],
+                              void *aux OVS_UNUSED)
+ {
+-    size_t size;
+-    FILE *stream;
+-    char *response = NULL;
+     struct netdev *netdev = NULL;
++    const char *error = NULL;
++    char *response = NULL;
++    FILE *stream;
++    size_t size;
+ 
+     if (argc == 2) {
+         netdev = netdev_from_name(argv[1]);
+@@ -4347,10 +4389,14 @@ netdev_dpdk_get_mempool_info(struct unixctl_conn *conn,
+         ovs_mutex_lock(&dev->mutex);
+         ovs_mutex_lock(&dpdk_mp_mutex);
+ 
+-        rte_mempool_dump(stream, dev->dpdk_mp->mp);
+-        fprintf(stream, "    count: avail (%u), in use (%u)\n",
+-                rte_mempool_avail_count(dev->dpdk_mp->mp),
+-                rte_mempool_in_use_count(dev->dpdk_mp->mp));
++        if (dev->dpdk_mp) {
++            rte_mempool_dump(stream, dev->dpdk_mp->mp);
++            fprintf(stream, "    count: avail (%u), in use (%u)\n",
++                    rte_mempool_avail_count(dev->dpdk_mp->mp),
++                    rte_mempool_in_use_count(dev->dpdk_mp->mp));
++        } else {
++            error = "Not allocated";
++        }
+ 
+         ovs_mutex_unlock(&dpdk_mp_mutex);
+         ovs_mutex_unlock(&dev->mutex);
+@@ -4362,7 +4408,11 @@ netdev_dpdk_get_mempool_info(struct unixctl_conn *conn,
+ 
+     fclose(stream);
+ 
+-    unixctl_command_reply(conn, response);
++    if (error) {
++        unixctl_command_reply_error(conn, error);
++    } else {
++        unixctl_command_reply(conn, response);
++    }
+ out:
+     free(response);
+     netdev_close(netdev);
 diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c
 index 1a54add87f..91ead921e1 100644
 --- a/lib/netdev-dummy.c
@@ -6023,7 +6070,7 @@ index 59f498a20d..6f5e58acb3 100644
  }
  
 diff --git a/ovsdb/transaction.c b/ovsdb/transaction.c
-index 7cf4a851aa..1bbebd65e5 100644
+index 7cf4a851aa..ff03f06ce8 100644
 --- a/ovsdb/transaction.c
 +++ b/ovsdb/transaction.c
 @@ -321,7 +321,8 @@ update_row_ref_count(struct ovsdb_txn *txn, struct ovsdb_txn_row *r)
@@ -6081,6 +6128,14 @@ index 7cf4a851aa..1bbebd65e5 100644
          }
  
          /* Checking added data and creating new references. */
+@@ -1056,7 +1067,6 @@ ovsdb_txn_precommit(struct ovsdb_txn *txn)
+      * was really a no-op. */
+     error = for_each_txn_row(txn, determine_changes);
+     if (error) {
+-        ovsdb_txn_abort(txn);
+         return OVSDB_WRAP_BUG("can't happen", error);
+     }
+     if (ovs_list_is_empty(&txn->txn_tables)) {
 diff --git a/ovsdb/trigger.c b/ovsdb/trigger.c
 index 0edcdd89c6..2a48ccc643 100644
 --- a/ovsdb/trigger.c
@@ -8725,10 +8780,23 @@ index 0d09906fb6..88f6605663 100644
  ])
  
 diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at
-index 0f58e85742..5ed1c7e676 100644
+index 0f58e85742..ebc6964a6b 100644
 --- a/tests/system-dpdk.at
 +++ b/tests/system-dpdk.at
-@@ -585,14 +585,13 @@ dnl Add userspace bridge and attach it to OVS with default MTU value
+@@ -82,6 +82,12 @@ AT_CHECK([grep "VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) vhost-user client:
+ AT_CHECK([grep "vHost User device 'dpdkvhostuserclient0' created in 'client' mode, using client socket" ovs-vswitchd.log], [], [stdout])
+ AT_CHECK([grep "VHOST_CONFIG: ($OVS_RUNDIR/dpdkvhostclient0) reconnecting..." ovs-vswitchd.log], [], [stdout])
+ 
++dnl Check that no mempool was allocated.
++AT_CHECK([ovs-appctl netdev-dpdk/get-mempool-info dpdkvhostuserclient0], [2], [], [dnl
++Not allocated
++ovs-appctl: ovs-vswitchd: server returned an error
++])
++
+ dnl Clean up
+ AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [], [stdout], [stderr])
+ OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
+@@ -585,14 +591,13 @@ dnl Add userspace bridge and attach it to OVS with default MTU value
  AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
  AT_CHECK([ovs-vsctl add-port br10 phy0 -- set Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [], [stdout], [stderr])
  AT_CHECK([ovs-vsctl show], [], [stdout])
@@ -8745,7 +8813,7 @@ index 0f58e85742..5ed1c7e676 100644
  
  dnl Fail if MTU is not supported
  AT_FAIL_IF([grep "Interface phy0 does not support MTU configuration" ovs-vswitchd.log], [], [stdout])
-@@ -600,10 +599,6 @@ AT_FAIL_IF([grep "Interface phy0 does not support MTU configuration" ovs-vswitch
+@@ -600,10 +605,6 @@ AT_FAIL_IF([grep "Interface phy0 does not support MTU configuration" ovs-vswitch
  dnl Fail if error is encountered during MTU setup
  AT_FAIL_IF([grep "Interface phy0 MTU (9000) setup error" ovs-vswitchd.log], [], [stdout])
  
@@ -8756,7 +8824,7 @@ index 0f58e85742..5ed1c7e676 100644
  dnl Clean up
  AT_CHECK([ovs-vsctl del-port br10 phy0], [], [stdout], [stderr])
  OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]")
-@@ -627,7 +622,9 @@ AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
+@@ -627,7 +628,9 @@ AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
  AT_CHECK([ovs-vsctl add-port br10 phy0 -- set Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [], [stdout], [stderr])
  AT_CHECK([ovs-vsctl set Interface phy0 mtu_request=9000])
  AT_CHECK([ovs-vsctl show], [], [stdout])
@@ -8767,7 +8835,7 @@ index 0f58e85742..5ed1c7e676 100644
  
  dnl Fail if MTU is not supported
  AT_FAIL_IF([grep "Interface phy0 does not support MTU configuration" ovs-vswitchd.log], [], [stdout])
-@@ -635,15 +632,9 @@ AT_FAIL_IF([grep "Interface phy0 does not support MTU configuration" ovs-vswitch
+@@ -635,15 +638,9 @@ AT_FAIL_IF([grep "Interface phy0 does not support MTU configuration" ovs-vswitch
  dnl Fail if error is encountered during MTU setup
  AT_FAIL_IF([grep "Interface phy0 MTU (9000) setup error" ovs-vswitchd.log], [], [stdout])
  
diff --git a/SPECS/openvswitch3.2.spec b/SPECS/openvswitch3.2.spec
index a17f80d..f2eaa50 100644
--- a/SPECS/openvswitch3.2.spec
+++ b/SPECS/openvswitch3.2.spec
@@ -57,7 +57,7 @@ Summary: Open vSwitch
 Group: System Environment/Daemons daemon/database/utilities
 URL: http://www.openvswitch.org/
 Version: 3.2.0
-Release: 96%{?dist}
+Release: 97%{?dist}
 
 # Nearly all of openvswitch is ASL 2.0.  The bugtool is LGPLv2+, and the
 # lib/sflow*.[ch] files are SISSL
@@ -763,6 +763,13 @@ exit 0
 %endif
 
 %changelog
+* Thu Aug 08 2024 Open vSwitch CI <ovs-ci@redhat.com> - 3.2.0-97
+- Merging upstream branch-3.2 [RH git: ebd0cb3338]
+    Commit list:
+    46cc67da40 netdev-dpdk: Fix race condition in mempool information dump.
+    fb46409cdc ovsdb: transaction: Remove incorrect transaction abort in pre-commit.
+
+
 * Fri Jul 26 2024 Timothy Redaelli <tredaelli@redhat.com> - 3.2.0-96
 - Use --with-version-suffix [RH git: 01fe20237b]