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;