diff --git a/SOURCES/openvswitch-2.16.0.patch b/SOURCES/openvswitch-2.16.0.patch
index 7e738f9..68b9404 100644
--- a/SOURCES/openvswitch-2.16.0.patch
+++ b/SOURCES/openvswitch-2.16.0.patch
@@ -2666,7 +2666,7 @@ index c808d205d5..e03cd8d0c5 100644
  mf_is_pipeline_field(const struct mf_field *mf)
  {
 diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
-index 45a96b9be2..ca92c947a2 100644
+index 45a96b9be2..738fb44b3c 100644
 --- a/lib/netdev-dpdk.c
 +++ b/lib/netdev-dpdk.c
 @@ -961,14 +961,6 @@ dpdk_eth_dev_port_config(struct netdev_dpdk *dev, int n_rxq, int n_txq)
@@ -2696,6 +2696,16 @@ index 45a96b9be2..ca92c947a2 100644
  
      /* A device may report more queues than it makes available (this has
       * been observed for Intel xl710, which reserves some of them for
+@@ -2867,6 +2864,9 @@ netdev_dpdk_send__(struct netdev_dpdk *dev, int qid,
+                    bool concurrent_txq)
+ {
+     if (OVS_UNLIKELY(!(dev->flags & NETDEV_UP))) {
++        rte_spinlock_lock(&dev->stats_lock);
++        dev->stats.tx_dropped += dp_packet_batch_size(batch);
++        rte_spinlock_unlock(&dev->stats_lock);
+         dp_packet_delete_batch(batch, true);
+         return;
+     }
 diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
 index 60dd138914..97bd21be4a 100644
 --- a/lib/netdev-linux.c
@@ -4947,7 +4957,7 @@ index 114aff8ea3..0fc6d2ea60 100644
      enum xc_type type;
      union {
 diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
-index a426fcfeb6..3a09500560 100644
+index a426fcfeb6..4c16aa3f99 100644
 --- a/ofproto/ofproto-dpif-xlate.c
 +++ b/ofproto/ofproto-dpif-xlate.c
 @@ -460,7 +460,7 @@ static void xlate_commit_actions(struct xlate_ctx *ctx);
@@ -5001,7 +5011,25 @@ index a426fcfeb6..3a09500560 100644
  static struct xbundle *
  xbundle_lookup(struct xlate_cfg *xcfg, const struct ofbundle *ofbundle)
  {
-@@ -3015,7 +3032,7 @@ xlate_normal(struct xlate_ctx *ctx)
+@@ -2125,9 +2142,14 @@ mirror_packet(struct xlate_ctx *ctx, struct xbundle *xbundle,
+         int snaplen;
+ 
+         /* Get the details of the mirror represented by the rightmost 1-bit. */
+-        ovs_assert(mirror_get(xbridge->mbridge, raw_ctz(mirrors),
+-                              &vlans, &dup_mirrors,
+-                              &out, &snaplen, &out_vlan));
++        if (OVS_UNLIKELY(!mirror_get(xbridge->mbridge, raw_ctz(mirrors),
++                                     &vlans, &dup_mirrors,
++                                     &out, &snaplen, &out_vlan))) {
++            /* The mirror got reconfigured before we got to read it's
++             * configuration. */
++            mirrors = zero_rightmost_1bit(mirrors);
++            continue;
++        }
+ 
+ 
+         /* If this mirror selects on the basis of VLAN, and it does not select
+@@ -3015,7 +3037,7 @@ xlate_normal(struct xlate_ctx *ctx)
      bool is_grat_arp = is_gratuitous_arp(flow, wc);
      if (ctx->xin->allow_side_effects
          && flow->packet_type == htonl(PT_ETH)
@@ -5010,7 +5038,7 @@ index a426fcfeb6..3a09500560 100644
      ) {
          update_learning_table(ctx, in_xbundle, flow->dl_src, vlan,
                                is_grat_arp);
-@@ -3024,12 +3041,14 @@ xlate_normal(struct xlate_ctx *ctx)
+@@ -3024,12 +3046,14 @@ xlate_normal(struct xlate_ctx *ctx)
          struct xc_entry *entry;
  
          /* Save just enough info to update mac learning table later. */
@@ -5031,7 +5059,7 @@ index a426fcfeb6..3a09500560 100644
      }
  
      /* Determine output bundle. */
-@@ -3272,7 +3291,9 @@ compose_ipfix_action(struct xlate_ctx *ctx, odp_port_t output_odp_port)
+@@ -3272,7 +3296,9 @@ compose_ipfix_action(struct xlate_ctx *ctx, odp_port_t output_odp_port)
      struct dpif_ipfix *ipfix = ctx->xbridge->ipfix;
      odp_port_t tunnel_out_port = ODPP_NONE;
  
@@ -5042,7 +5070,7 @@ index a426fcfeb6..3a09500560 100644
          return;
      }
  
-@@ -3521,6 +3542,9 @@ propagate_tunnel_data_to_flow__(struct flow *dst_flow,
+@@ -3521,6 +3547,9 @@ propagate_tunnel_data_to_flow__(struct flow *dst_flow,
      dst_flow->dl_dst = dmac;
      dst_flow->dl_src = smac;
  
@@ -5052,7 +5080,7 @@ index a426fcfeb6..3a09500560 100644
      dst_flow->packet_type = htonl(PT_ETH);
      dst_flow->nw_dst = src_flow->tunnel.ip_dst;
      dst_flow->nw_src = src_flow->tunnel.ip_src;
-@@ -3598,7 +3622,7 @@ propagate_tunnel_data_to_flow(struct xlate_ctx *ctx, struct eth_addr dmac,
+@@ -3598,7 +3627,7 @@ propagate_tunnel_data_to_flow(struct xlate_ctx *ctx, struct eth_addr dmac,
  static int
  native_tunnel_output(struct xlate_ctx *ctx, const struct xport *xport,
                       const struct flow *flow, odp_port_t tunnel_odp_port,
@@ -5061,7 +5089,7 @@ index a426fcfeb6..3a09500560 100644
  {
      struct netdev_tnl_build_header_params tnl_params;
      struct ovs_action_push_tnl tnl_push_data;
-@@ -3728,7 +3752,7 @@ native_tunnel_output(struct xlate_ctx *ctx, const struct xport *xport,
+@@ -3728,7 +3757,7 @@ native_tunnel_output(struct xlate_ctx *ctx, const struct xport *xport,
          entry->tunnel_hdr.hdr_size = tnl_push_data.header_len;
          entry->tunnel_hdr.operation = ADD;
  
@@ -5070,7 +5098,7 @@ index a426fcfeb6..3a09500560 100644
  
          /* Similar to the stats update in revalidation, the x_cache entries
           * are populated by the previous translation are used to update the
-@@ -3822,7 +3846,7 @@ xlate_flow_is_protected(const struct xlate_ctx *ctx, const struct flow *flow, co
+@@ -3822,7 +3851,7 @@ xlate_flow_is_protected(const struct xlate_ctx *ctx, const struct flow *flow, co
   */
  static void
  patch_port_output(struct xlate_ctx *ctx, const struct xport *in_dev,
@@ -5079,7 +5107,7 @@ index a426fcfeb6..3a09500560 100644
  {
      struct flow *flow = &ctx->xin->flow;
      struct flow old_flow = ctx->xin->flow;
-@@ -3864,8 +3888,9 @@ patch_port_output(struct xlate_ctx *ctx, const struct xport *in_dev,
+@@ -3864,8 +3893,9 @@ patch_port_output(struct xlate_ctx *ctx, const struct xport *in_dev,
      if (!process_special(ctx, out_dev) && may_receive(out_dev, ctx)) {
          if (xport_stp_forward_state(out_dev) &&
              xport_rstp_forward_state(out_dev)) {
@@ -5090,7 +5118,7 @@ index a426fcfeb6..3a09500560 100644
              if (!ctx->freezing) {
                  xlate_action_set(ctx);
              }
-@@ -3880,7 +3905,7 @@ patch_port_output(struct xlate_ctx *ctx, const struct xport *in_dev,
+@@ -3880,7 +3910,7 @@ patch_port_output(struct xlate_ctx *ctx, const struct xport *in_dev,
              mirror_mask_t old_mirrors2 = ctx->mirrors;
  
              xlate_table_action(ctx, flow->in_port.ofp_port, 0, true, true,
@@ -5099,7 +5127,7 @@ index a426fcfeb6..3a09500560 100644
              ctx->mirrors = old_mirrors2;
              ctx->base_flow = old_base_flow;
              ctx->odp_actions->size = old_size;
-@@ -4097,7 +4122,21 @@ terminate_native_tunnel(struct xlate_ctx *ctx, struct flow *flow,
+@@ -4097,7 +4127,21 @@ terminate_native_tunnel(struct xlate_ctx *ctx, struct flow *flow,
              (flow->dl_type == htons(ETH_TYPE_ARP) ||
               flow->nw_proto == IPPROTO_ICMPV6) &&
               is_neighbor_reply_correct(ctx, flow)) {
@@ -5122,7 +5150,7 @@ index a426fcfeb6..3a09500560 100644
          }
      }
  
-@@ -4107,7 +4146,7 @@ terminate_native_tunnel(struct xlate_ctx *ctx, struct flow *flow,
+@@ -4107,7 +4151,7 @@ terminate_native_tunnel(struct xlate_ctx *ctx, struct flow *flow,
  static void
  compose_output_action__(struct xlate_ctx *ctx, ofp_port_t ofp_port,
                          const struct xlate_bond_recirc *xr, bool check_stp,
@@ -5131,7 +5159,7 @@ index a426fcfeb6..3a09500560 100644
  {
      const struct xport *xport = get_ofp_port(ctx->xbridge, ofp_port);
      struct flow_wildcards *wc = ctx->wc;
-@@ -4137,6 +4176,10 @@ compose_output_action__(struct xlate_ctx *ctx, ofp_port_t ofp_port,
+@@ -4137,6 +4181,10 @@ compose_output_action__(struct xlate_ctx *ctx, ofp_port_t ofp_port,
          if (xport->pt_mode == NETDEV_PT_LEGACY_L3) {
              flow->packet_type = PACKET_TYPE_BE(OFPHTN_ETHERTYPE,
                                                 ntohs(flow->dl_type));
@@ -5142,7 +5170,7 @@ index a426fcfeb6..3a09500560 100644
          }
      }
  
-@@ -4144,7 +4187,7 @@ compose_output_action__(struct xlate_ctx *ctx, ofp_port_t ofp_port,
+@@ -4144,7 +4192,7 @@ compose_output_action__(struct xlate_ctx *ctx, ofp_port_t ofp_port,
         if (truncate) {
             xlate_report_error(ctx, "Cannot truncate output to patch port");
         }
@@ -5151,7 +5179,7 @@ index a426fcfeb6..3a09500560 100644
         return;
      }
  
-@@ -4239,7 +4282,8 @@ compose_output_action__(struct xlate_ctx *ctx, ofp_port_t ofp_port,
+@@ -4239,7 +4287,8 @@ compose_output_action__(struct xlate_ctx *ctx, ofp_port_t ofp_port,
                             xr->recirc_id);
          } else if (is_native_tunnel) {
              /* Output to native tunnel port. */
@@ -5161,7 +5189,7 @@ index a426fcfeb6..3a09500560 100644
              flow->tunnel = flow_tnl; /* Restore tunnel metadata */
  
          } else if (terminate_native_tunnel(ctx, flow, wc,
-@@ -6177,11 +6221,32 @@ static void
+@@ -6177,11 +6226,32 @@ static void
  compose_conntrack_action(struct xlate_ctx *ctx, struct ofpact_conntrack *ofc,
                           bool is_last_action)
  {
@@ -5197,7 +5225,7 @@ index a426fcfeb6..3a09500560 100644
      /* Ensure that any prior actions are applied before composing the new
       * conntrack action. */
      xlate_commit_actions(ctx);
-@@ -6193,11 +6258,6 @@ compose_conntrack_action(struct xlate_ctx *ctx, struct ofpact_conntrack *ofc,
+@@ -6193,11 +6263,6 @@ compose_conntrack_action(struct xlate_ctx *ctx, struct ofpact_conntrack *ofc,
      do_xlate_actions(ofc->actions, ofpact_ct_get_action_len(ofc), ctx,
                       is_last_action, false);
  
@@ -5209,7 +5237,7 @@ index a426fcfeb6..3a09500560 100644
  
      ct_offset = nl_msg_start_nested(ctx->odp_actions, OVS_ACTION_ATTR_CT);
      if (ofc->flags & NX_CT_F_COMMIT) {
-@@ -6333,6 +6393,7 @@ xlate_check_pkt_larger(struct xlate_ctx *ctx,
+@@ -6333,6 +6398,7 @@ xlate_check_pkt_larger(struct xlate_ctx *ctx,
       * then ctx->exit would be true. Reset to false so that we can
       * do flow translation for 'IF_LESS_EQUAL' case. finish_freezing()
       * would have taken care of Undoing the changes done for freeze. */
@@ -5217,7 +5245,7 @@ index a426fcfeb6..3a09500560 100644
      ctx->exit = false;
  
      offset_attr = nl_msg_start_nested(
-@@ -6357,7 +6418,7 @@ xlate_check_pkt_larger(struct xlate_ctx *ctx,
+@@ -6357,7 +6423,7 @@ xlate_check_pkt_larger(struct xlate_ctx *ctx,
      ctx->was_mpls = old_was_mpls;
      ctx->conntracked = old_conntracked;
      ctx->xin->flow = old_flow;
@@ -5226,7 +5254,7 @@ index a426fcfeb6..3a09500560 100644
  }
  
  static void
-@@ -6738,13 +6799,14 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len,
+@@ -6738,13 +6804,14 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len,
          return;
      }
  
@@ -5242,7 +5270,7 @@ index a426fcfeb6..3a09500560 100644
  
          if (ctx->error) {
              break;
-@@ -6752,7 +6814,7 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len,
+@@ -6752,7 +6819,7 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len,
  
          recirc_for_mpls(a, ctx);
  
@@ -5251,7 +5279,7 @@ index a426fcfeb6..3a09500560 100644
              /* Check if need to store the remaining actions for later
               * execution. */
              if (ctx->freezing) {
-@@ -7149,17 +7211,18 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len,
+@@ -7149,17 +7216,18 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len,
              break;
  
          case OFPACT_CHECK_PKT_LARGER: {
diff --git a/SPECS/openvswitch2.16.spec b/SPECS/openvswitch2.16.spec
index e8f61aa..0de1124 100644
--- a/SPECS/openvswitch2.16.spec
+++ b/SPECS/openvswitch2.16.spec
@@ -57,7 +57,7 @@ Summary: Open vSwitch
 Group: System Environment/Daemons daemon/database/utilities
 URL: http://www.openvswitch.org/
 Version: 2.16.0
-Release: 74%{?dist}
+Release: 75%{?dist}
 
 # Nearly all of openvswitch is ASL 2.0.  The bugtool is LGPLv2+, and the
 # lib/sflow*.[ch] files are SISSL
@@ -699,6 +699,13 @@ exit 0
 %endif
 
 %changelog
+* Wed May 04 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-75
+- Merging upstream branch-2.16 [RH git: 0c22edcd05]
+    Commit list:
+    df77b74438 ofproto-dpif-xlate: Remove mirror assert.
+    c81571d602 netdev-dpdk: Fix tx drops statistic for a down netdev.
+
+
 * Thu Apr 28 2022 Timothy Redaelli <tredaelli@redhat.com> - 2.16.0-74
 - vhost: fix queue number check when setting inflight FD [RH git: d084ce15a7]
     [ upstream commit 6442c329b9d2ded0f44b27d2016aaba8ba5844c5 ]