flow_attr 3179 drivers/infiniband/core/uverbs_cmd.c struct ib_flow_attr *flow_attr; flow_attr 3199 drivers/infiniband/core/uverbs_cmd.c if (cmd.flow_attr.flags >= IB_FLOW_ATTR_FLAGS_RESERVED) flow_attr 3202 drivers/infiniband/core/uverbs_cmd.c if ((cmd.flow_attr.flags & IB_FLOW_ATTR_FLAGS_DONT_TRAP) && flow_attr 3203 drivers/infiniband/core/uverbs_cmd.c ((cmd.flow_attr.type == IB_FLOW_ATTR_ALL_DEFAULT) || flow_attr 3204 drivers/infiniband/core/uverbs_cmd.c (cmd.flow_attr.type == IB_FLOW_ATTR_MC_DEFAULT))) flow_attr 3207 drivers/infiniband/core/uverbs_cmd.c if (cmd.flow_attr.num_of_specs > IB_FLOW_SPEC_SUPPORT_LAYERS) flow_attr 3210 drivers/infiniband/core/uverbs_cmd.c if (cmd.flow_attr.size > flow_attr 3211 drivers/infiniband/core/uverbs_cmd.c (cmd.flow_attr.num_of_specs * sizeof(struct ib_uverbs_flow_spec))) flow_attr 3214 drivers/infiniband/core/uverbs_cmd.c if (cmd.flow_attr.reserved[0] || flow_attr 3215 drivers/infiniband/core/uverbs_cmd.c cmd.flow_attr.reserved[1]) flow_attr 3218 drivers/infiniband/core/uverbs_cmd.c if (cmd.flow_attr.num_of_specs) { flow_attr 3219 drivers/infiniband/core/uverbs_cmd.c kern_flow_attr = kmalloc(sizeof(*kern_flow_attr) + cmd.flow_attr.size, flow_attr 3224 drivers/infiniband/core/uverbs_cmd.c *kern_flow_attr = cmd.flow_attr; flow_attr 3226 drivers/infiniband/core/uverbs_cmd.c cmd.flow_attr.size); flow_attr 3230 drivers/infiniband/core/uverbs_cmd.c kern_flow_attr = &cmd.flow_attr; flow_attr 3254 drivers/infiniband/core/uverbs_cmd.c flow_attr = kzalloc(struct_size(flow_attr, flows, flow_attr 3255 drivers/infiniband/core/uverbs_cmd.c cmd.flow_attr.num_of_specs), GFP_KERNEL); flow_attr 3256 drivers/infiniband/core/uverbs_cmd.c if (!flow_attr) { flow_attr 3260 drivers/infiniband/core/uverbs_cmd.c uflow_res = flow_resources_alloc(cmd.flow_attr.num_of_specs); flow_attr 3266 drivers/infiniband/core/uverbs_cmd.c flow_attr->type = kern_flow_attr->type; flow_attr 3267 drivers/infiniband/core/uverbs_cmd.c flow_attr->priority = kern_flow_attr->priority; flow_attr 3268 drivers/infiniband/core/uverbs_cmd.c flow_attr->num_of_specs = kern_flow_attr->num_of_specs; flow_attr 3269 drivers/infiniband/core/uverbs_cmd.c flow_attr->port = kern_flow_attr->port; flow_attr 3270 drivers/infiniband/core/uverbs_cmd.c flow_attr->flags = kern_flow_attr->flags; flow_attr 3271 drivers/infiniband/core/uverbs_cmd.c flow_attr->size = sizeof(*flow_attr); flow_attr 3274 drivers/infiniband/core/uverbs_cmd.c ib_spec = flow_attr + 1; flow_attr 3275 drivers/infiniband/core/uverbs_cmd.c for (i = 0; i < flow_attr->num_of_specs && flow_attr 3276 drivers/infiniband/core/uverbs_cmd.c cmd.flow_attr.size >= sizeof(*kern_spec) && flow_attr 3277 drivers/infiniband/core/uverbs_cmd.c cmd.flow_attr.size >= kern_spec->size; flow_attr 3285 drivers/infiniband/core/uverbs_cmd.c flow_attr->size += flow_attr 3287 drivers/infiniband/core/uverbs_cmd.c cmd.flow_attr.size -= kern_spec->size; flow_attr 3291 drivers/infiniband/core/uverbs_cmd.c if (cmd.flow_attr.size || (i != flow_attr->num_of_specs)) { flow_attr 3293 drivers/infiniband/core/uverbs_cmd.c i, cmd.flow_attr.size); flow_attr 3299 drivers/infiniband/core/uverbs_cmd.c qp, flow_attr, IB_FLOW_DOMAIN_USER, &attrs->driver_udata); flow_attr 3316 drivers/infiniband/core/uverbs_cmd.c kfree(flow_attr); flow_attr 3317 drivers/infiniband/core/uverbs_cmd.c if (cmd.flow_attr.num_of_specs) flow_attr 3326 drivers/infiniband/core/uverbs_cmd.c kfree(flow_attr); flow_attr 3332 drivers/infiniband/core/uverbs_cmd.c if (cmd.flow_attr.num_of_specs) flow_attr 3851 drivers/infiniband/core/uverbs_cmd.c flow_attr, flow_attr 1433 drivers/infiniband/hw/mlx4/main.c struct ib_flow_attr *flow_attr) flow_attr 1438 drivers/infiniband/hw/mlx4/main.c u8 link_layer = rdma_port_get_link_layer(qp->device, flow_attr->port); flow_attr 1447 drivers/infiniband/hw/mlx4/main.c ib_flow = flow_attr + 1; flow_attr 1450 drivers/infiniband/hw/mlx4/main.c j < flow_attr->num_of_specs; k++) { flow_attr 1471 drivers/infiniband/hw/mlx4/main.c ib_flow = flow_attr + 1; flow_attr 1472 drivers/infiniband/hw/mlx4/main.c for (j = 0; j < flow_attr->num_of_specs; flow_attr 1525 drivers/infiniband/hw/mlx4/main.c static int __mlx4_ib_create_flow(struct ib_qp *qp, struct ib_flow_attr *flow_attr, flow_attr 1545 drivers/infiniband/hw/mlx4/main.c if (flow_attr->priority > MLX4_IB_FLOW_MAX_PRIO) { flow_attr 1546 drivers/infiniband/hw/mlx4/main.c pr_err("Invalid priority value %d\n", flow_attr->priority); flow_attr 1564 drivers/infiniband/hw/mlx4/main.c flow_attr->priority); flow_attr 1566 drivers/infiniband/hw/mlx4/main.c ctrl->port = flow_attr->port; flow_attr 1569 drivers/infiniband/hw/mlx4/main.c ib_flow = flow_attr + 1; flow_attr 1572 drivers/infiniband/hw/mlx4/main.c default_flow = __mlx4_ib_default_rules_match(qp, flow_attr); flow_attr 1583 drivers/infiniband/hw/mlx4/main.c for (i = 0; i < flow_attr->num_of_specs; i++) { flow_attr 1595 drivers/infiniband/hw/mlx4/main.c flow_attr->num_of_specs == 1) { flow_attr 1598 drivers/infiniband/hw/mlx4/main.c ((union ib_flow_spec *)(flow_attr + 1))->type; flow_attr 1630 drivers/infiniband/hw/mlx4/main.c static int mlx4_ib_tunnel_steer_add(struct ib_qp *qp, struct ib_flow_attr *flow_attr, flow_attr 1642 drivers/infiniband/hw/mlx4/main.c ib_flow = flow_attr + 1; flow_attr 1645 drivers/infiniband/hw/mlx4/main.c if (ib_spec->type != IB_FLOW_SPEC_ETH || flow_attr->num_of_specs != 1) flow_attr 1649 drivers/infiniband/hw/mlx4/main.c flow_attr->port, qp->qp_num, flow_attr 1650 drivers/infiniband/hw/mlx4/main.c MLX4_DOMAIN_UVERBS | (flow_attr->priority & 0xff), flow_attr 1656 drivers/infiniband/hw/mlx4/main.c struct ib_flow_attr *flow_attr, flow_attr 1663 drivers/infiniband/hw/mlx4/main.c (flow_attr->num_of_specs > 1) || (flow_attr->priority != 0)) { flow_attr 1667 drivers/infiniband/hw/mlx4/main.c if (flow_attr->num_of_specs == 0) { flow_attr 1673 drivers/infiniband/hw/mlx4/main.c ib_spec = (union ib_flow_spec *)(flow_attr + 1); flow_attr 1706 drivers/infiniband/hw/mlx4/main.c struct ib_flow_attr *flow_attr, flow_attr 1715 drivers/infiniband/hw/mlx4/main.c if (flow_attr->port < 1 || flow_attr->port > qp->device->phys_port_cnt) flow_attr 1718 drivers/infiniband/hw/mlx4/main.c if (flow_attr->flags & ~IB_FLOW_ATTR_FLAGS_DONT_TRAP) flow_attr 1721 drivers/infiniband/hw/mlx4/main.c if ((flow_attr->flags & IB_FLOW_ATTR_FLAGS_DONT_TRAP) && flow_attr 1722 drivers/infiniband/hw/mlx4/main.c (flow_attr->type != IB_FLOW_ATTR_NORMAL)) flow_attr 1737 drivers/infiniband/hw/mlx4/main.c switch (flow_attr->type) { flow_attr 1743 drivers/infiniband/hw/mlx4/main.c if (unlikely(flow_attr->flags & IB_FLOW_ATTR_FLAGS_DONT_TRAP)) { flow_attr 1745 drivers/infiniband/hw/mlx4/main.c flow_attr, flow_attr 1773 drivers/infiniband/hw/mlx4/main.c err = __mlx4_ib_create_flow(qp, flow_attr, domain, type[i], flow_attr 1781 drivers/infiniband/hw/mlx4/main.c flow_attr->port = 2; flow_attr 1782 drivers/infiniband/hw/mlx4/main.c err = __mlx4_ib_create_flow(qp, flow_attr, flow_attr 1785 drivers/infiniband/hw/mlx4/main.c flow_attr->port = 1; flow_attr 1794 drivers/infiniband/hw/mlx4/main.c if (i < ARRAY_SIZE(type) && flow_attr->type == IB_FLOW_ATTR_NORMAL) { flow_attr 1795 drivers/infiniband/hw/mlx4/main.c err = mlx4_ib_tunnel_steer_add(qp, flow_attr, flow_attr 1801 drivers/infiniband/hw/mlx4/main.c flow_attr->port = 2; flow_attr 1802 drivers/infiniband/hw/mlx4/main.c err = mlx4_ib_tunnel_steer_add(qp, flow_attr, flow_attr 1804 drivers/infiniband/hw/mlx4/main.c flow_attr->port = 1; flow_attr 2680 drivers/infiniband/hw/mlx5/main.c const struct ib_flow_attr *flow_attr, flow_attr 3015 drivers/infiniband/hw/mlx5/main.c flow_attr->flags & IB_FLOW_ATTR_FLAGS_EGRESS, action); flow_attr 3114 drivers/infiniband/hw/mlx5/main.c const struct ib_flow_attr *flow_attr, flow_attr 3117 drivers/infiniband/hw/mlx5/main.c union ib_flow_spec *ib_spec = (union ib_flow_spec *)(flow_attr + 1); flow_attr 3133 drivers/infiniband/hw/mlx5/main.c for (spec_index = 0; spec_index < flow_attr->num_of_specs; spec_index++) { flow_attr 3163 drivers/infiniband/hw/mlx5/main.c const struct ib_flow_attr *flow_attr) flow_attr 3165 drivers/infiniband/hw/mlx5/main.c return is_valid_ethertype(mdev, flow_attr, false) && flow_attr 3166 drivers/infiniband/hw/mlx5/main.c is_valid_ethertype(mdev, flow_attr, true); flow_attr 3258 drivers/infiniband/hw/mlx5/main.c struct ib_flow_attr *flow_attr, flow_attr 3261 drivers/infiniband/hw/mlx5/main.c bool dont_trap = flow_attr->flags & IB_FLOW_ATTR_FLAGS_DONT_TRAP; flow_attr 3276 drivers/infiniband/hw/mlx5/main.c if (flow_attr->type == IB_FLOW_ATTR_NORMAL) { flow_attr 3279 drivers/infiniband/hw/mlx5/main.c if (flow_is_multicast_only(flow_attr) && flow_attr 3283 drivers/infiniband/hw/mlx5/main.c priority = ib_prio_to_core_prio(flow_attr->priority, flow_attr 3308 drivers/infiniband/hw/mlx5/main.c } else if (flow_attr->type == IB_FLOW_ATTR_ALL_DEFAULT || flow_attr 3309 drivers/infiniband/hw/mlx5/main.c flow_attr->type == IB_FLOW_ATTR_MC_DEFAULT) { flow_attr 3316 drivers/infiniband/hw/mlx5/main.c } else if (flow_attr->type == IB_FLOW_ATTR_SNIFFER) { flow_attr 3516 drivers/infiniband/hw/mlx5/main.c const struct ib_flow_attr *flow_attr, flow_attr 3527 drivers/infiniband/hw/mlx5/main.c const void *ib_flow = (const void *)flow_attr + sizeof(*flow_attr); flow_attr 3532 drivers/infiniband/hw/mlx5/main.c bool is_egress = flow_attr->flags & IB_FLOW_ATTR_FLAGS_EGRESS; flow_attr 3534 drivers/infiniband/hw/mlx5/main.c if (!is_valid_attr(dev->mdev, flow_attr)) flow_attr 3549 drivers/infiniband/hw/mlx5/main.c for (spec_index = 0; spec_index < flow_attr->num_of_specs; spec_index++) { flow_attr 3551 drivers/infiniband/hw/mlx5/main.c ib_flow, flow_attr, &flow_act, flow_attr 3565 drivers/infiniband/hw/mlx5/main.c if (!flow_is_multicast_only(flow_attr)) flow_attr 3571 drivers/infiniband/hw/mlx5/main.c rep = dev->port[flow_attr->port - 1].rep; flow_attr 3617 drivers/infiniband/hw/mlx5/main.c (flow_attr->type == IB_FLOW_ATTR_ALL_DEFAULT || flow_attr 3618 drivers/infiniband/hw/mlx5/main.c flow_attr->type == IB_FLOW_ATTR_MC_DEFAULT)) { flow_attr 3620 drivers/infiniband/hw/mlx5/main.c spec->flow_context.flow_tag, flow_attr->type); flow_attr 3651 drivers/infiniband/hw/mlx5/main.c const struct ib_flow_attr *flow_attr, flow_attr 3654 drivers/infiniband/hw/mlx5/main.c return _create_flow_rule(dev, ft_prio, flow_attr, dst, 0, NULL); flow_attr 3659 drivers/infiniband/hw/mlx5/main.c struct ib_flow_attr *flow_attr, flow_attr 3665 drivers/infiniband/hw/mlx5/main.c handler = create_flow_rule(dev, ft_prio, flow_attr, NULL); flow_attr 3668 drivers/infiniband/hw/mlx5/main.c flow_attr, dst); flow_attr 3688 drivers/infiniband/hw/mlx5/main.c struct ib_flow_attr *flow_attr, flow_attr 3695 drivers/infiniband/hw/mlx5/main.c struct ib_flow_attr flow_attr; flow_attr 3699 drivers/infiniband/hw/mlx5/main.c .flow_attr = { flow_attr 3711 drivers/infiniband/hw/mlx5/main.c .flow_attr = { flow_attr 3725 drivers/infiniband/hw/mlx5/main.c &leftovers_specs[LEFTOVERS_MC].flow_attr, flow_attr 3728 drivers/infiniband/hw/mlx5/main.c flow_attr->type == IB_FLOW_ATTR_ALL_DEFAULT) { flow_attr 3730 drivers/infiniband/hw/mlx5/main.c &leftovers_specs[LEFTOVERS_UC].flow_attr, flow_attr 3753 drivers/infiniband/hw/mlx5/main.c static const struct ib_flow_attr flow_attr = { flow_attr 3755 drivers/infiniband/hw/mlx5/main.c .size = sizeof(flow_attr) flow_attr 3758 drivers/infiniband/hw/mlx5/main.c handler_rx = create_flow_rule(dev, ft_rx, &flow_attr, dst); flow_attr 3764 drivers/infiniband/hw/mlx5/main.c handler_tx = create_flow_rule(dev, ft_tx, &flow_attr, dst); flow_attr 3783 drivers/infiniband/hw/mlx5/main.c struct ib_flow_attr *flow_attr, flow_attr 3793 drivers/infiniband/hw/mlx5/main.c bool is_egress = flow_attr->flags & IB_FLOW_ATTR_FLAGS_EGRESS; flow_attr 3830 drivers/infiniband/hw/mlx5/main.c if (flow_attr->priority > MLX5_IB_FLOW_LAST_PRIO) { flow_attr 3836 drivers/infiniband/hw/mlx5/main.c flow_attr->port > dev->num_ports || flow_attr 3837 drivers/infiniband/hw/mlx5/main.c (flow_attr->flags & ~(IB_FLOW_ATTR_FLAGS_DONT_TRAP | flow_attr 3844 drivers/infiniband/hw/mlx5/main.c (flow_attr->type == IB_FLOW_ATTR_ALL_DEFAULT || flow_attr 3845 drivers/infiniband/hw/mlx5/main.c flow_attr->type == IB_FLOW_ATTR_MC_DEFAULT)) { flow_attr 3858 drivers/infiniband/hw/mlx5/main.c ft_prio = get_flow_table(dev, flow_attr, flow_attr 3864 drivers/infiniband/hw/mlx5/main.c if (flow_attr->type == IB_FLOW_ATTR_SNIFFER) { flow_attr 3865 drivers/infiniband/hw/mlx5/main.c ft_prio_tx = get_flow_table(dev, flow_attr, MLX5_IB_FT_TX); flow_attr 3883 drivers/infiniband/hw/mlx5/main.c if (flow_attr->type == IB_FLOW_ATTR_NORMAL) { flow_attr 3884 drivers/infiniband/hw/mlx5/main.c if (flow_attr->flags & IB_FLOW_ATTR_FLAGS_DONT_TRAP) { flow_attr 3886 drivers/infiniband/hw/mlx5/main.c flow_attr, dst); flow_attr 3890 drivers/infiniband/hw/mlx5/main.c handler = _create_flow_rule(dev, ft_prio, flow_attr, flow_attr 3893 drivers/infiniband/hw/mlx5/main.c } else if (flow_attr->type == IB_FLOW_ATTR_ALL_DEFAULT || flow_attr 3894 drivers/infiniband/hw/mlx5/main.c flow_attr->type == IB_FLOW_ATTR_MC_DEFAULT) { flow_attr 3895 drivers/infiniband/hw/mlx5/main.c handler = create_leftovers_rule(dev, ft_prio, flow_attr, flow_attr 3897 drivers/infiniband/hw/mlx5/main.c } else if (flow_attr->type == IB_FLOW_ATTR_SNIFFER) { flow_attr 2432 include/rdma/ib_verbs.h struct ib_flow_attr *flow_attr, flow_attr 1147 include/uapi/rdma/ib_user_verbs.h struct ib_uverbs_flow_attr flow_attr;