struct flow_dissector *dissector = rule->match.dissector;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS)))
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS)))
                return -EOPNOTSUPP;
 
        if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_ETH_ADDRS)) {
 
        u16 pcp = U16_MAX;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS))) {
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS))) {
                NL_SET_ERR_MSG_MOD(extack,
                                   "Unsupported keys used");
                return -EOPNOTSUPP;
 
        struct flow_dissector *dissector = rule->match.dissector;
 
        /* KEY_CONTROL and KEY_BASIC are needed for forming a meaningful key */
-       if ((dissector->used_keys & BIT(FLOW_DISSECTOR_KEY_CONTROL)) == 0 ||
-           (dissector->used_keys & BIT(FLOW_DISSECTOR_KEY_BASIC)) == 0) {
-               netdev_info(bp->dev, "cannot form TC key: used_keys = 0x%x\n",
+       if ((dissector->used_keys & BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL)) == 0 ||
+           (dissector->used_keys & BIT_ULL(FLOW_DISSECTOR_KEY_BASIC)) == 0) {
+               netdev_info(bp->dev, "cannot form TC key: used_keys = 0x%llx\n",
                            dissector->used_keys);
                return -EOPNOTSUPP;
        }
 
        u16 ethtype_key = 0;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_KEYID) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN) |
-             BIT(FLOW_DISSECTOR_KEY_IP))) {
-               netdev_warn(dev, "Unsupported key used: 0x%x\n",
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_KEYID) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IP))) {
+               netdev_warn(dev, "Unsupported key used: 0x%llx\n",
                            dissector->used_keys);
                return -EOPNOTSUPP;
        }
 
        struct dpsw_acl_fields *acl_h, *acl_m;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS) |
-             BIT(FLOW_DISSECTOR_KEY_IP) |
-             BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS))) {
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IP) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS))) {
                NL_SET_ERR_MSG_MOD(extack,
                                   "Unsupported keys used");
                return -EOPNOTSUPP;
        int ret = -EOPNOTSUPP;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN))) {
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN))) {
                NL_SET_ERR_MSG_MOD(extack,
                                   "Mirroring is supported only per VLAN");
                return -EOPNOTSUPP;
 
 static struct actions_fwd enetc_act_fwd[] = {
        {
                BIT(FLOW_ACTION_GATE),
-               BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS),
+               BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS),
                FILTER_ACTION_TYPE_PSFP
        },
        {
                BIT(FLOW_ACTION_POLICE) |
                BIT(FLOW_ACTION_GATE),
-               BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS),
+               BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS),
                FILTER_ACTION_TYPE_PSFP
        },
        /* example for ACL actions */
        return err;
 }
 
-static struct actions_fwd *enetc_check_flow_actions(u64 acts,
-                                                   unsigned int inputkeys)
+static struct actions_fwd *
+enetc_check_flow_actions(u64 acts, unsigned long long inputkeys)
 {
        int i;
 
 
        struct flow_dissector *dissector = flow->match.dissector;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN) |
-             BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS))) {
-               dev_err(&hdev->pdev->dev, "unsupported key set: %#x\n",
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS))) {
+               dev_err(&hdev->pdev->dev, "unsupported key set: %#llx\n",
                        dissector->used_keys);
                return -EOPNOTSUPP;
        }
 
        u8 field_flags = 0;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN) |
-             BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_KEYID))) {
-               dev_err(&pf->pdev->dev, "Unsupported key used: 0x%x\n",
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_KEYID))) {
+               dev_err(&pf->pdev->dev, "Unsupported key used: 0x%llx\n",
                        dissector->used_keys);
                return -EOPNOTSUPP;
        }
 
        struct virtchnl_filter *vf = &filter->f;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN) |
-             BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_KEYID))) {
-               dev_err(&adapter->pdev->dev, "Unsupported key used: 0x%x\n",
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_KEYID))) {
+               dev_err(&adapter->pdev->dev, "Unsupported key used: 0x%llx\n",
                        dissector->used_keys);
                return -EOPNOTSUPP;
        }
 
        dissector = rule->match.dissector;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN) |
-             BIT(FLOW_DISSECTOR_KEY_CVLAN) |
-             BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_KEYID) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_PORTS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_OPTS) |
-             BIT(FLOW_DISSECTOR_KEY_IP) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_IP) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS) |
-             BIT(FLOW_DISSECTOR_KEY_PPPOE) |
-             BIT(FLOW_DISSECTOR_KEY_L2TPV3))) {
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_CVLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_KEYID) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_PORTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_OPTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IP) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IP) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PPPOE) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_L2TPV3))) {
                NL_SET_ERR_MSG_MOD(fltr->extack, "Unsupported key used");
                return -EOPNOTSUPP;
        }
                 */
                headers = &fltr->inner_headers;
        } else if (dissector->used_keys &
-                 (BIT(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) |
-                  BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) |
-                  BIT(FLOW_DISSECTOR_KEY_ENC_KEYID) |
-                  BIT(FLOW_DISSECTOR_KEY_ENC_PORTS))) {
+                 (BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) |
+                  BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) |
+                  BIT_ULL(FLOW_DISSECTOR_KEY_ENC_KEYID) |
+                  BIT_ULL(FLOW_DISSECTOR_KEY_ENC_PORTS))) {
                NL_SET_ERR_MSG_MOD(fltr->extack, "Tunnel key used, but device isn't a tunnel");
                return -EOPNOTSUPP;
        } else {
 
        struct netlink_ext_ack *extack = f->common.extack;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN))) {
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN))) {
                NL_SET_ERR_MSG_MOD(extack,
                                   "Unsupported key used, only BASIC, CONTROL, ETH_ADDRS and VLAN are supported");
                return -EOPNOTSUPP;
 
        dissector = rule->match.dissector;
 
        if ((dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN) |
-             BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS) |
-             BIT(FLOW_DISSECTOR_KEY_IP))))  {
-               netdev_info(nic->netdev, "unsupported flow used key 0x%x",
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IP))))  {
+               netdev_info(nic->netdev, "unsupported flow used key 0x%llx",
                            dissector->used_keys);
                return -EOPNOTSUPP;
        }
 
        int err;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_META) |
-             BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_ICMP) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS_RANGE) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN))) {
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_META) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ICMP) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS_RANGE) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN))) {
                NL_SET_ERR_MSG_MOD(f->common.extack, "Unsupported key");
                return -EOPNOTSUPP;
        }
 
 }
 
 static inline bool
-mlx5_tc_ct_valid_used_dissector_keys(const u32 used_keys)
+mlx5_tc_ct_valid_used_dissector_keys(const u64 used_keys)
 {
-#define DISS_BIT(name) BIT(FLOW_DISSECTOR_KEY_ ## name)
-       const u32 basic_keys = DISS_BIT(BASIC) | DISS_BIT(CONTROL) | DISS_BIT(META);
-       const u32 ipv4_tcp = basic_keys | DISS_BIT(IPV4_ADDRS) | DISS_BIT(PORTS) | DISS_BIT(TCP);
-       const u32 ipv6_tcp = basic_keys | DISS_BIT(IPV6_ADDRS) | DISS_BIT(PORTS) | DISS_BIT(TCP);
-       const u32 ipv4_udp = basic_keys | DISS_BIT(IPV4_ADDRS) | DISS_BIT(PORTS);
-       const u32 ipv6_udp = basic_keys | DISS_BIT(IPV6_ADDRS) | DISS_BIT(PORTS);
-       const u32 ipv4_gre = basic_keys | DISS_BIT(IPV4_ADDRS);
-       const u32 ipv6_gre = basic_keys | DISS_BIT(IPV6_ADDRS);
+#define DISS_BIT(name) BIT_ULL(FLOW_DISSECTOR_KEY_ ## name)
+       const u64 basic_keys = DISS_BIT(BASIC) | DISS_BIT(CONTROL) |
+                               DISS_BIT(META);
+       const u64 ipv4_tcp = basic_keys | DISS_BIT(IPV4_ADDRS) |
+                               DISS_BIT(PORTS) | DISS_BIT(TCP);
+       const u64 ipv6_tcp = basic_keys | DISS_BIT(IPV6_ADDRS) |
+                               DISS_BIT(PORTS) | DISS_BIT(TCP);
+       const u64 ipv4_udp = basic_keys | DISS_BIT(IPV4_ADDRS) |
+                               DISS_BIT(PORTS);
+       const u64 ipv6_udp = basic_keys | DISS_BIT(IPV6_ADDRS) |
+                                DISS_BIT(PORTS);
+       const u64 ipv4_gre = basic_keys | DISS_BIT(IPV4_ADDRS);
+       const u64 ipv6_gre = basic_keys | DISS_BIT(IPV6_ADDRS);
 
        return (used_keys == ipv4_tcp || used_keys == ipv4_udp || used_keys == ipv6_tcp ||
                used_keys == ipv6_udp || used_keys == ipv4_gre || used_keys == ipv6_gre);
        struct flow_match_tcp tcp;
 
        if (!mlx5_tc_ct_valid_used_dissector_keys(flow_rule->match.dissector->used_keys)) {
-               ct_dbg("rule uses unexpected dissectors (0x%08x)",
+               ct_dbg("rule uses unexpected dissectors (0x%016llx)",
                       flow_rule->match.dissector->used_keys);
                return false;
        }
 
        match_level = outer_match_level;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_META) |
-             BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN) |
-             BIT(FLOW_DISSECTOR_KEY_CVLAN) |
-             BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_KEYID) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_PORTS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_TCP) |
-             BIT(FLOW_DISSECTOR_KEY_IP)  |
-             BIT(FLOW_DISSECTOR_KEY_CT) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_IP) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_OPTS) |
-             BIT(FLOW_DISSECTOR_KEY_ICMP) |
-             BIT(FLOW_DISSECTOR_KEY_MPLS))) {
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_META) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_CVLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_KEYID) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_PORTS)     |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_TCP) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IP)  |
+             BIT_ULL(FLOW_DISSECTOR_KEY_CT) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IP) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_OPTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ICMP) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_MPLS))) {
                NL_SET_ERR_MSG_MOD(extack, "Unsupported key");
-               netdev_dbg(priv->netdev, "Unsupported key used: 0x%x\n",
+               netdev_dbg(priv->netdev, "Unsupported key used: 0x%llx\n",
                           dissector->used_keys);
                return -EOPNOTSUPP;
        }
 
        int err;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_META) |
-             BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS_RANGE) |
-             BIT(FLOW_DISSECTOR_KEY_TCP) |
-             BIT(FLOW_DISSECTOR_KEY_IP) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN))) {
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_META) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS_RANGE) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_TCP) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IP) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN))) {
                dev_err(mlxsw_sp->bus_info->dev, "Unsupported key\n");
                NL_SET_ERR_MSG_MOD(f->common.extack, "Unsupported key");
                return -EOPNOTSUPP;
 
                        goto out;
        }
 
-       st->used_keys |= BIT(FLOW_DISSECTOR_KEY_CONTROL);
+       st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL);
 
        return err;
 
                }
        }
 
-       st->used_keys |= BIT(FLOW_DISSECTOR_KEY_BASIC);
+       st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_BASIC);
        return err;
 out:
        NL_SET_ERR_MSG_MOD(st->fco->common.extack, "ip_proto parse error");
 
                }
        }
 
-       st->used_keys |= BIT(FLOW_DISSECTOR_KEY_BASIC);
+       st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_BASIC);
 
        return err;
 
                        goto out;
        }
 
-       st->used_keys |= BIT(FLOW_DISSECTOR_KEY_CONTROL);
+       st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL);
 
        return err;
 
 
                        goto out;
        }
 
-       st->used_keys |= BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS);
+       st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS);
 
        return err;
 
                }
        }
 
-       st->used_keys |= BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS);
+       st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS);
 
        return err;
 
                                goto out;
                }
        }
-       st->used_keys |= BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS);
+       st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS);
        return err;
 out:
        NL_SET_ERR_MSG_MOD(st->fco->common.extack, "ipv6_addr parse error");
                        goto out;
        }
 
-       st->used_keys |= BIT(FLOW_DISSECTOR_KEY_PORTS);
+       st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_PORTS);
 
        return err;
 
                        goto out;
        }
 
-       st->used_keys |= BIT(FLOW_DISSECTOR_KEY_CVLAN);
+       st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_CVLAN);
 
        return 0;
 out:
        if (mt.mask->vlan_tpid)
                st->tpid = be16_to_cpu(mt.key->vlan_tpid);
 
-       st->used_keys |= BIT(FLOW_DISSECTOR_KEY_VLAN);
+       st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_VLAN);
 
        return 0;
 out:
                        goto out;
        }
 
-       st->used_keys |= BIT(FLOW_DISSECTOR_KEY_TCP);
+       st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_TCP);
 
        return err;
 
                        goto out;
        }
 
-       st->used_keys |= BIT(FLOW_DISSECTOR_KEY_ARP);
+       st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_ARP);
 
        return 0;
 
                        goto out;
        }
 
-       st->used_keys |= BIT(FLOW_DISSECTOR_KEY_IP);
+       st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_IP);
 
        return err;
 
 
        u16 l3_proto;
        u8 l4_proto;
        u16 tpid;
-       unsigned int used_keys;
+       unsigned long long used_keys;
 };
 
 int vcap_tc_flower_handler_ethaddr_usage(struct vcap_tc_flower_parse_usage *st);
 
        int ret;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_META) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN) |
-             BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS))) {
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_META) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS))) {
                return -EOPNOTSUPP;
        }
 
                 * then just bail out
                 */
                if ((dissector->used_keys &
-                   (BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
-                    BIT(FLOW_DISSECTOR_KEY_BASIC) |
-                    BIT(FLOW_DISSECTOR_KEY_CONTROL))) !=
-                   (BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
-                    BIT(FLOW_DISSECTOR_KEY_BASIC) |
-                    BIT(FLOW_DISSECTOR_KEY_CONTROL)))
+                   (BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
+                    BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+                    BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL))) !=
+                   (BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
+                    BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+                    BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL)))
                        return -EOPNOTSUPP;
 
                flow_rule_match_eth_addrs(rule, &match);
 
        struct flow_match_ct ct;
        int i;
 
-       if (dissector->used_keys & BIT(FLOW_DISSECTOR_KEY_CT)) {
+       if (dissector->used_keys & BIT_ULL(FLOW_DISSECTOR_KEY_CT)) {
                flow_rule_match_ct(rule, &ct);
                if (ct.key->ct_state)
                        return false;
        struct flow_match_ct ct;
        int i;
 
-       if (dissector->used_keys & BIT(FLOW_DISSECTOR_KEY_CT)) {
+       if (dissector->used_keys & BIT_ULL(FLOW_DISSECTOR_KEY_CT)) {
                flow_rule_match_ct(rule, &ct);
                if (ct.key->ct_state & TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED)
                        return true;
 static int nfp_ct_merge_check(struct nfp_fl_ct_flow_entry *entry1,
                              struct nfp_fl_ct_flow_entry *entry2)
 {
-       unsigned int ovlp_keys = entry1->rule->match.dissector->used_keys &
-                                entry2->rule->match.dissector->used_keys;
+       unsigned long long ovlp_keys;
        bool out, is_v6 = false;
        u8 ip_proto = 0;
+       ovlp_keys = entry1->rule->match.dissector->used_keys &
+                       entry2->rule->match.dissector->used_keys;
        /* Temporary buffer for mangling keys, 64 is enough to cover max
         * struct size of key in various fields that may be mangled.
         * Supported fields to mangle:
        /* Check the overlapped fields one by one, the unmasked part
         * should not conflict with each other.
         */
-       if (ovlp_keys & BIT(FLOW_DISSECTOR_KEY_CONTROL)) {
+       if (ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL)) {
                struct flow_match_control match1, match2;
 
                flow_rule_match_control(entry1->rule, &match1);
                        goto check_failed;
        }
 
-       if (ovlp_keys & BIT(FLOW_DISSECTOR_KEY_BASIC)) {
+       if (ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_BASIC)) {
                struct flow_match_basic match1, match2;
 
                flow_rule_match_basic(entry1->rule, &match1);
         * will be do merge check when do nft and post ct merge,
         * so skip this ip merge check here.
         */
-       if ((ovlp_keys & BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS)) &&
+       if ((ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS)) &&
            nfp_ct_merge_check_cannot_skip(entry1, entry2)) {
                struct flow_match_ipv4_addrs match1, match2;
 
         * will be do merge check when do nft and post ct merge,
         * so skip this ip merge check here.
         */
-       if ((ovlp_keys & BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS)) &&
+       if ((ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS)) &&
            nfp_ct_merge_check_cannot_skip(entry1, entry2)) {
                struct flow_match_ipv6_addrs match1, match2;
 
         * will be do merge check when do nft and post ct merge,
         * so skip this tport merge check here.
         */
-       if ((ovlp_keys & BIT(FLOW_DISSECTOR_KEY_PORTS)) &&
+       if ((ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_PORTS)) &&
            nfp_ct_merge_check_cannot_skip(entry1, entry2)) {
                enum flow_action_mangle_base htype = FLOW_ACT_MANGLE_UNSPEC;
                struct flow_match_ports match1, match2;
                        goto check_failed;
        }
 
-       if (ovlp_keys & BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS)) {
+       if (ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS)) {
                struct flow_match_eth_addrs match1, match2;
 
                flow_rule_match_eth_addrs(entry1->rule, &match1);
                        goto check_failed;
        }
 
-       if (ovlp_keys & BIT(FLOW_DISSECTOR_KEY_VLAN)) {
+       if (ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_VLAN)) {
                struct flow_match_vlan match1, match2;
 
                flow_rule_match_vlan(entry1->rule, &match1);
                        goto check_failed;
        }
 
-       if (ovlp_keys & BIT(FLOW_DISSECTOR_KEY_MPLS)) {
+       if (ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_MPLS)) {
                struct flow_match_mpls match1, match2;
 
                flow_rule_match_mpls(entry1->rule, &match1);
                        goto check_failed;
        }
 
-       if (ovlp_keys & BIT(FLOW_DISSECTOR_KEY_TCP)) {
+       if (ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_TCP)) {
                struct flow_match_tcp match1, match2;
 
                flow_rule_match_tcp(entry1->rule, &match1);
                        goto check_failed;
        }
 
-       if (ovlp_keys & BIT(FLOW_DISSECTOR_KEY_IP)) {
+       if (ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_IP)) {
                struct flow_match_ip match1, match2;
 
                flow_rule_match_ip(entry1->rule, &match1);
                        goto check_failed;
        }
 
-       if (ovlp_keys & BIT(FLOW_DISSECTOR_KEY_ENC_KEYID)) {
+       if (ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_ENC_KEYID)) {
                struct flow_match_enc_keyid match1, match2;
 
                flow_rule_match_enc_keyid(entry1->rule, &match1);
                        goto check_failed;
        }
 
-       if (ovlp_keys & BIT(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS)) {
+       if (ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS)) {
                struct flow_match_ipv4_addrs match1, match2;
 
                flow_rule_match_enc_ipv4_addrs(entry1->rule, &match1);
                        goto check_failed;
        }
 
-       if (ovlp_keys & BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS)) {
+       if (ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS)) {
                struct flow_match_ipv6_addrs match1, match2;
 
                flow_rule_match_enc_ipv6_addrs(entry1->rule, &match1);
                        goto check_failed;
        }
 
-       if (ovlp_keys & BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL)) {
+       if (ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_ENC_CONTROL)) {
                struct flow_match_control match1, match2;
 
                flow_rule_match_enc_control(entry1->rule, &match1);
                        goto check_failed;
        }
 
-       if (ovlp_keys & BIT(FLOW_DISSECTOR_KEY_ENC_IP)) {
+       if (ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IP)) {
                struct flow_match_ip match1, match2;
 
                flow_rule_match_enc_ip(entry1->rule, &match1);
                        goto check_failed;
        }
 
-       if (ovlp_keys & BIT(FLOW_DISSECTOR_KEY_ENC_OPTS)) {
+       if (ovlp_keys & BIT_ULL(FLOW_DISSECTOR_KEY_ENC_OPTS)) {
                struct flow_match_enc_opts match1, match2;
 
                flow_rule_match_enc_opts(entry1->rule, &match1);
        int i;
 
        ct_met = get_flow_act(nft_entry->rule, FLOW_ACTION_CT_METADATA);
-       if (ct_met && (dissector->used_keys & BIT(FLOW_DISSECTOR_KEY_CT))) {
+       if (ct_met && (dissector->used_keys & BIT_ULL(FLOW_DISSECTOR_KEY_CT))) {
                u32 *act_lbl;
 
                act_lbl = ct_met->ct_metadata.labels;
 
         FLOW_DIS_FIRST_FRAG)
 
 #define NFP_FLOWER_WHITELIST_DISSECTOR \
-       (BIT(FLOW_DISSECTOR_KEY_CONTROL) | \
-        BIT(FLOW_DISSECTOR_KEY_BASIC) | \
-        BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) | \
-        BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) | \
-        BIT(FLOW_DISSECTOR_KEY_TCP) | \
-        BIT(FLOW_DISSECTOR_KEY_PORTS) | \
-        BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) | \
-        BIT(FLOW_DISSECTOR_KEY_VLAN) | \
-        BIT(FLOW_DISSECTOR_KEY_CVLAN) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_KEYID) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_PORTS) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_OPTS) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_IP) | \
-        BIT(FLOW_DISSECTOR_KEY_MPLS) | \
-        BIT(FLOW_DISSECTOR_KEY_CT) | \
-        BIT(FLOW_DISSECTOR_KEY_META) | \
-        BIT(FLOW_DISSECTOR_KEY_IP))
+       (BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_TCP) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_VLAN) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_CVLAN) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_KEYID) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_CONTROL) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_PORTS) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_OPTS) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IP) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_MPLS) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_CT) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_META) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_IP))
 
 #define NFP_FLOWER_WHITELIST_TUN_DISSECTOR \
-       (BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_KEYID) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_OPTS) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_PORTS) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_IP))
+       (BIT_ULL(FLOW_DISSECTOR_KEY_ENC_CONTROL) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_KEYID) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_OPTS) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_PORTS) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IP))
 
 #define NFP_FLOWER_WHITELIST_TUN_DISSECTOR_R \
-       (BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS))
+       (BIT_ULL(FLOW_DISSECTOR_KEY_ENC_CONTROL) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS))
 
 #define NFP_FLOWER_WHITELIST_TUN_DISSECTOR_V6_R \
-       (BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL) | \
-        BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS))
+       (BIT_ULL(FLOW_DISSECTOR_KEY_ENC_CONTROL) | \
+        BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS))
 
 #define NFP_FLOWER_MERGE_FIELDS \
        (NFP_FLOWER_LAYER_PORT | \
        struct flow_dissector *dissector = rule->match.dissector;
        struct flow_match_ct ct;
 
-       if (dissector->used_keys & BIT(FLOW_DISSECTOR_KEY_CT)) {
+       if (dissector->used_keys & BIT_ULL(FLOW_DISSECTOR_KEY_CT)) {
                flow_rule_match_ct(rule, &ct);
                /* Allow special case where CT match is all 0 */
                if (memchr_inv(ct.key, 0, sizeof(*ct.key)))
 
        memset(tuple, 0, sizeof(*tuple));
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS))) {
-               DP_NOTICE(edev, "Unsupported key set:0x%x\n",
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS))) {
+               DP_NOTICE(edev, "Unsupported key set:0x%llx\n",
                          dissector->used_keys);
                return -EOPNOTSUPP;
        }
 
                }
        }
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_VLAN) |
-             BIT(FLOW_DISSECTOR_KEY_CVLAN) |
-             BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_PORTS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_KEYID) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_IP) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_PORTS) |
-             BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_TCP) |
-             BIT(FLOW_DISSECTOR_KEY_IP))) {
-               NL_SET_ERR_MSG_FMT_MOD(extack, "Unsupported flower keys %#x",
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_VLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_CVLAN) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_KEYID) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IP) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_PORTS) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ENC_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_TCP) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_IP))) {
+               NL_SET_ERR_MSG_FMT_MOD(extack, "Unsupported flower keys %#llx",
                                       dissector->used_keys);
                return -EOPNOTSUPP;
        }
            !(match->value.eth_proto == htons(ETH_P_IP) ||
              match->value.eth_proto == htons(ETH_P_IPV6)))
                if (dissector->used_keys &
-                   (BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
-                    BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
-                    BIT(FLOW_DISSECTOR_KEY_PORTS) |
-                    BIT(FLOW_DISSECTOR_KEY_IP) |
-                    BIT(FLOW_DISSECTOR_KEY_TCP))) {
-                       NL_SET_ERR_MSG_FMT_MOD(extack, "L3/L4 flower keys %#x require protocol ipv[46]",
+                   (BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
+                    BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
+                    BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) |
+                    BIT_ULL(FLOW_DISSECTOR_KEY_IP) |
+                    BIT_ULL(FLOW_DISSECTOR_KEY_TCP))) {
+                       NL_SET_ERR_MSG_FMT_MOD(extack,
+                                              "L3/L4 flower keys %#llx require protocol ipv[46]",
                                               dissector->used_keys);
                        return -EINVAL;
                }
        if ((match->value.ip_proto != IPPROTO_UDP &&
             match->value.ip_proto != IPPROTO_TCP) || !IS_ALL_ONES(match->mask.ip_proto))
                if (dissector->used_keys &
-                   (BIT(FLOW_DISSECTOR_KEY_PORTS) |
-                    BIT(FLOW_DISSECTOR_KEY_TCP))) {
-                       NL_SET_ERR_MSG_FMT_MOD(extack, "L4 flower keys %#x require ipproto udp or tcp",
+                   (BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) |
+                    BIT_ULL(FLOW_DISSECTOR_KEY_TCP))) {
+                       NL_SET_ERR_MSG_FMT_MOD(extack,
+                                              "L4 flower keys %#llx require ipproto udp or tcp",
                                               dissector->used_keys);
                        return -EINVAL;
                }
                MAP_ENC_KEY_AND_MASK(PORTS, ports, enc_ports, dst, enc_dport);
                MAP_ENC_KEY_AND_MASK(KEYID, enc_keyid, enc_keyid, keyid, enc_keyid);
        } else if (dissector->used_keys &
-                  (BIT(FLOW_DISSECTOR_KEY_ENC_KEYID) |
-                   BIT(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) |
-                   BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) |
-                   BIT(FLOW_DISSECTOR_KEY_ENC_IP) |
-                   BIT(FLOW_DISSECTOR_KEY_ENC_PORTS))) {
-               NL_SET_ERR_MSG_FMT_MOD(extack, "Flower enc keys require enc_control (keys: %#x)",
+                  (BIT_ULL(FLOW_DISSECTOR_KEY_ENC_KEYID) |
+                   BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) |
+                   BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) |
+                   BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IP) |
+                   BIT_ULL(FLOW_DISSECTOR_KEY_ENC_PORTS))) {
+               NL_SET_ERR_MSG_FMT_MOD(extack,
+                                      "Flower enc keys require enc_control (keys: %#llx)",
                                       dissector->used_keys);
                return -EOPNOTSUPP;
        }
 
                goto cleanup_rss;
        }
 
-       dissector->used_keys |= (1 << FLOW_DISSECTOR_KEY_IPV4_ADDRS);
+       dissector->used_keys |= (1ULL << FLOW_DISSECTOR_KEY_IPV4_ADDRS);
        dissector->offset[FLOW_DISSECTOR_KEY_IPV4_ADDRS] = 0;
 
        cls = kzalloc(sizeof(*cls), GFP_KERNEL);
                goto cleanup_rss;
        }
 
-       dissector->used_keys |= (1 << FLOW_DISSECTOR_KEY_BASIC);
-       dissector->used_keys |= (1 << FLOW_DISSECTOR_KEY_PORTS);
+       dissector->used_keys |= (1ULL << FLOW_DISSECTOR_KEY_BASIC);
+       dissector->used_keys |= (1ULL << FLOW_DISSECTOR_KEY_PORTS);
        dissector->offset[FLOW_DISSECTOR_KEY_BASIC] = 0;
        dissector->offset[FLOW_DISSECTOR_KEY_PORTS] = offsetof(typeof(keys), key);
 
 
        int ret;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS))) {
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS))) {
                NL_SET_ERR_MSG_MOD(extack,
                                   "Unsupported keys used");
                return -EOPNOTSUPP;
 
        int ret;
 
        if (dissector->used_keys &
-           ~(BIT(FLOW_DISSECTOR_KEY_BASIC) |
-             BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-             BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS))) {
+           ~(BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+             BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS))) {
                NL_SET_ERR_MSG_MOD(extack,
                                   "Unsupported keys used");
                return -EOPNOTSUPP;
 
 };
 
 struct flow_dissector {
-       unsigned int used_keys; /* each bit repesents presence of one key id */
+       unsigned long long  used_keys;
+               /* each bit represents presence of one key id */
        unsigned short int offset[FLOW_DISSECTOR_KEY_MAX];
 };
 
 static inline bool dissector_uses_key(const struct flow_dissector *flow_dissector,
                                      enum flow_dissector_key_id key_id)
 {
-       return flow_dissector->used_keys & (1 << key_id);
+       return flow_dissector->used_keys & (1ULL << key_id);
 }
 
 static inline void *skb_flow_dissector_target(struct flow_dissector *flow_dissector,
 
 static void dissector_set_key(struct flow_dissector *flow_dissector,
                              enum flow_dissector_key_id key_id)
 {
-       flow_dissector->used_keys |= (1 << key_id);
+       flow_dissector->used_keys |= (1ULL << key_id);
 }
 
 void skb_flow_dissector_init(struct flow_dissector *flow_dissector,
 
                if (v4_m_spec->ip4src ||
                    v4_m_spec->ip4dst) {
                        match->dissector.used_keys |=
-                               BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS);
+                               BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS);
                        match->dissector.offset[FLOW_DISSECTOR_KEY_IPV4_ADDRS] =
                                offsetof(struct ethtool_rx_flow_key, ipv4);
                }
                if (v4_m_spec->psrc ||
                    v4_m_spec->pdst) {
                        match->dissector.used_keys |=
-                               BIT(FLOW_DISSECTOR_KEY_PORTS);
+                               BIT_ULL(FLOW_DISSECTOR_KEY_PORTS);
                        match->dissector.offset[FLOW_DISSECTOR_KEY_PORTS] =
                                offsetof(struct ethtool_rx_flow_key, tp);
                }
                if (!ipv6_addr_any((struct in6_addr *)v6_m_spec->ip6src) ||
                    !ipv6_addr_any((struct in6_addr *)v6_m_spec->ip6dst)) {
                        match->dissector.used_keys |=
-                               BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS);
+                               BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS);
                        match->dissector.offset[FLOW_DISSECTOR_KEY_IPV6_ADDRS] =
                                offsetof(struct ethtool_rx_flow_key, ipv6);
                }
                if (v6_m_spec->psrc ||
                    v6_m_spec->pdst) {
                        match->dissector.used_keys |=
-                               BIT(FLOW_DISSECTOR_KEY_PORTS);
+                               BIT_ULL(FLOW_DISSECTOR_KEY_PORTS);
                        match->dissector.offset[FLOW_DISSECTOR_KEY_PORTS] =
                                offsetof(struct ethtool_rx_flow_key, tp);
                }
                        match->key.ip.tos = v6_spec->tclass;
                        match->mask.ip.tos = v6_m_spec->tclass;
                        match->dissector.used_keys |=
-                               BIT(FLOW_DISSECTOR_KEY_IP);
+                               BIT_ULL(FLOW_DISSECTOR_KEY_IP);
                        match->dissector.offset[FLOW_DISSECTOR_KEY_IP] =
                                offsetof(struct ethtool_rx_flow_key, ip);
                }
                break;
        }
 
-       match->dissector.used_keys |= BIT(FLOW_DISSECTOR_KEY_BASIC);
+       match->dissector.used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_BASIC);
        match->dissector.offset[FLOW_DISSECTOR_KEY_BASIC] =
                offsetof(struct ethtool_rx_flow_key, basic);
 
                if (ext_m_spec->vlan_etype ||
                    ext_m_spec->vlan_tci) {
                        match->dissector.used_keys |=
-                               BIT(FLOW_DISSECTOR_KEY_VLAN);
+                               BIT_ULL(FLOW_DISSECTOR_KEY_VLAN);
                        match->dissector.offset[FLOW_DISSECTOR_KEY_VLAN] =
                                offsetof(struct ethtool_rx_flow_key, vlan);
                }
                       ETH_ALEN);
 
                match->dissector.used_keys |=
-                       BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS);
+                       BIT_ULL(FLOW_DISSECTOR_KEY_ETH_ADDRS);
                match->dissector.offset[FLOW_DISSECTOR_KEY_ETH_ADDRS] =
                        offsetof(struct ethtool_rx_flow_key, eth_addrs);
        }
 
 {
        struct nf_flow_key *mask = &match->mask;
        struct nf_flow_key *key = &match->key;
-       unsigned int enc_keys;
+       unsigned long long enc_keys;
 
        if (!tun_info || !(tun_info->mode & IP_TUNNEL_INFO_TX))
                return;
        NF_FLOW_DISSECTOR(match, FLOW_DISSECTOR_KEY_ENC_KEYID, enc_key_id);
        key->enc_key_id.keyid = tunnel_id_to_key32(tun_info->key.tun_id);
        mask->enc_key_id.keyid = 0xffffffff;
-       enc_keys = BIT(FLOW_DISSECTOR_KEY_ENC_KEYID) |
-                  BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL);
+       enc_keys = BIT_ULL(FLOW_DISSECTOR_KEY_ENC_KEYID) |
+                  BIT_ULL(FLOW_DISSECTOR_KEY_ENC_CONTROL);
 
        if (ip_tunnel_info_af(tun_info) == AF_INET) {
                NF_FLOW_DISSECTOR(match, FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS,
                        mask->enc_ipv4.src = 0xffffffff;
                if (key->enc_ipv4.dst)
                        mask->enc_ipv4.dst = 0xffffffff;
-               enc_keys |= BIT(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS);
+               enc_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS);
                key->enc_control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
        } else {
                memcpy(&key->enc_ipv6.src, &tun_info->key.u.ipv6.dst,
                           sizeof(struct in6_addr)))
                        memset(&mask->enc_ipv6.dst, 0xff,
                               sizeof(struct in6_addr));
-               enc_keys |= BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS);
+               enc_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS);
                key->enc_control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS;
        }
 
                return -EOPNOTSUPP;
        }
        mask->control.addr_type = 0xffff;
-       match->dissector.used_keys |= BIT(key->control.addr_type);
+       match->dissector.used_keys |= BIT_ULL(key->control.addr_type);
        mask->basic.n_proto = 0xffff;
 
        switch (tuple->l4proto) {
        case IPPROTO_TCP:
                key->tcp.flags = 0;
                mask->tcp.flags = cpu_to_be16(be32_to_cpu(TCP_FLAG_RST | TCP_FLAG_FIN) >> 16);
-               match->dissector.used_keys |= BIT(FLOW_DISSECTOR_KEY_TCP);
+               match->dissector.used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_TCP);
                break;
        case IPPROTO_UDP:
        case IPPROTO_GRE:
        key->basic.ip_proto = tuple->l4proto;
        mask->basic.ip_proto = 0xff;
 
-       match->dissector.used_keys |= BIT(FLOW_DISSECTOR_KEY_META) |
-                                     BIT(FLOW_DISSECTOR_KEY_CONTROL) |
-                                     BIT(FLOW_DISSECTOR_KEY_BASIC);
+       match->dissector.used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_META) |
+                                     BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL) |
+                                     BIT_ULL(FLOW_DISSECTOR_KEY_BASIC);
 
        switch (tuple->l4proto) {
        case IPPROTO_TCP:
                key->tp.dst = tuple->dst_port;
                mask->tp.dst = 0xffff;
 
-               match->dissector.used_keys |= BIT(FLOW_DISSECTOR_KEY_PORTS);
+               match->dissector.used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_PORTS);
                break;
        }
 
 
        struct nft_flow_key *mask = &match->mask;
        struct nft_flow_key *key = &match->key;
 
-       if (match->dissector.used_keys & BIT(FLOW_DISSECTOR_KEY_CONTROL))
+       if (match->dissector.used_keys & BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL))
                return;
 
        key->control.addr_type = addr_type;
        mask->control.addr_type = 0xffff;
-       match->dissector.used_keys |= BIT(FLOW_DISSECTOR_KEY_CONTROL);
+       match->dissector.used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL);
        match->dissector.offset[FLOW_DISSECTOR_KEY_CONTROL] =
                offsetof(struct nft_flow_key, control);
 }
                .mask   = match->mask.basic.n_proto,
        };
 
-       if (match->dissector.used_keys & BIT(FLOW_DISSECTOR_KEY_VLAN) &&
+       if (match->dissector.used_keys & BIT_ULL(FLOW_DISSECTOR_KEY_VLAN) &&
            (match->key.vlan.vlan_tpid == htons(ETH_P_8021Q) ||
             match->key.vlan.vlan_tpid == htons(ETH_P_8021AD))) {
                match->key.basic.n_proto = match->key.cvlan.vlan_tpid;
                match->mask.vlan.vlan_tpid = ethertype.mask;
                match->dissector.offset[FLOW_DISSECTOR_KEY_CVLAN] =
                        offsetof(struct nft_flow_key, cvlan);
-               match->dissector.used_keys |= BIT(FLOW_DISSECTOR_KEY_CVLAN);
-       } else if (match->dissector.used_keys & BIT(FLOW_DISSECTOR_KEY_BASIC) &&
+               match->dissector.used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_CVLAN);
+       } else if (match->dissector.used_keys &
+                  BIT_ULL(FLOW_DISSECTOR_KEY_BASIC) &&
                   (match->key.basic.n_proto == htons(ETH_P_8021Q) ||
                    match->key.basic.n_proto == htons(ETH_P_8021AD))) {
                match->key.basic.n_proto = match->key.vlan.vlan_tpid;
                match->mask.vlan.vlan_tpid = ethertype.mask;
                match->dissector.offset[FLOW_DISSECTOR_KEY_VLAN] =
                        offsetof(struct nft_flow_key, vlan);
-               match->dissector.used_keys |= BIT(FLOW_DISSECTOR_KEY_VLAN);
+               match->dissector.used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_VLAN);
        }
 }
 
 
        memcpy(key + reg->offset, data, reg->len);
        memcpy(mask + reg->offset, datamask, reg->len);
 
-       flow->match.dissector.used_keys |= BIT(reg->key);
+       flow->match.dissector.used_keys |= BIT_ULL(reg->key);
        flow->match.dissector.offset[reg->key] = reg->base_offset;
 
        if (reg->key == FLOW_DISSECTOR_KEY_META &&