Netdev List
 help / color / mirror / Atom feed
* [PATCH rdma-next 20/27] RDMA/mlx5: Enable reformat on NIC RX if supported
From: Leon Romanovsky @ 2018-07-29 12:58 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Leon Romanovsky, RDMA mailing list, Guy Levi, Mark Bloch,
	Or Gerlitz, Saeed Mahameed, linux-netdev
In-Reply-To: <20180729125905.31989-1-leon@kernel.org>

From: Mark Bloch <markb@mellanox.com>

A L3_TUNNEL_TO_L2 decap flow action requires to enable the encap bit on
the Flow table, enable it if supported. This will allow to attach those
flow actions to NIC RX steering. We don't enable if running on a
representor.

Signed-off-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/hw/mlx5/main.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 9c42a1059590..b1c7cf26e206 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -3087,6 +3087,10 @@ static struct mlx5_ib_flow_prio *get_flow_table(struct mlx5_ib_dev *dev,
 			if (!dev->rep &&
 			    MLX5_CAP_FLOWTABLE_NIC_RX(dev->mdev, decap))
 				flags |= MLX5_FLOW_TABLE_TUNNEL_EN_DECAP;
+			if (!dev->rep &&
+			    MLX5_CAP_FLOWTABLE_NIC_RX(dev->mdev,
+						      reformat_l3_tunnel_to_l2))
+				flags |= MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT;
 		} else {
 			max_table_size = BIT(MLX5_CAP_FLOWTABLE_NIC_TX(dev->mdev,
 								       log_max_ft_size));
-- 
2.14.4

^ permalink raw reply related

* [PATCH rdma-next 21/27] RDMA/mlx5: Enable attaching packet reformat action to steering flows
From: Leon Romanovsky @ 2018-07-29 12:58 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Leon Romanovsky, RDMA mailing list, Guy Levi, Mark Bloch,
	Or Gerlitz, Saeed Mahameed, linux-netdev
In-Reply-To: <20180729125905.31989-1-leon@kernel.org>

From: Mark Bloch <markb@mellanox.com>

Any matching rules will be mutated based on the packet reformat context
which is attached to that given flow rule.

Signed-off-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/hw/mlx5/main.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index b1c7cf26e206..0af0bdc5804b 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -2478,6 +2478,13 @@ static int parse_flow_flow_action(const union ib_flow_spec *ib_spec,
 			action->action |= MLX5_FLOW_CONTEXT_ACTION_DECAP;
 			return 0;
 		}
+		if (maction->flow_action_raw.sub_type ==
+		    MLX5_IB_FLOW_ACTION_PACKET_REFORMAT) {
+			action->action |=
+				MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT;
+			action->reformat_id = maction->flow_action_raw.action_id;
+			return 0;
+		}
 		/* fall through */
 	default:
 		return -EOPNOTSUPP;
-- 
2.14.4

^ permalink raw reply related

* [PATCH rdma-next 22/27] IB/uverbs: Add IDRs array attribute type to ioctl() interface
From: Leon Romanovsky @ 2018-07-29 12:59 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Leon Romanovsky, RDMA mailing list, Guy Levi, Mark Bloch,
	Or Gerlitz, Saeed Mahameed, linux-netdev
In-Reply-To: <20180729125905.31989-1-leon@kernel.org>

From: Guy Levi <guyle@mellanox.com>

Methods sometimes need to get a flexible set of idrs and not a strict
set as can be achieved today by the conventional idr attribute. This is
an idrs-array-like behavior.
Since this may be popular used, we add a new IDRS_ARRAY attribute to the
generic uverbs ioctl layer.

This attribute is embedded in methods, like any other attributes we
currently have. IDRS_ARRAY points to array of idrs of the same object
type and same access rights (only write and read are supported). It
is defined with minimum and maximum length to be enforced and can be
defined as mandatory attribute.

Signed-off-by: Guy Levi <guyle@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/core/uverbs_ioctl.c   | 94 +++++++++++++++++++++++++++++++-
 include/rdma/uverbs_ioctl.h              | 68 ++++++++++++++++++++++-
 include/uapi/rdma/rdma_user_ioctl_cmds.h |  2 +-
 3 files changed, 160 insertions(+), 4 deletions(-)

diff --git a/drivers/infiniband/core/uverbs_ioctl.c b/drivers/infiniband/core/uverbs_ioctl.c
index 3ad3b69e32ab..ce40f97dbbf2 100644
--- a/drivers/infiniband/core/uverbs_ioctl.c
+++ b/drivers/infiniband/core/uverbs_ioctl.c
@@ -46,6 +46,79 @@ static bool uverbs_is_attr_cleared(const struct ib_uverbs_attr *uattr,
 			   0, uattr->len - len);
 }
 
+static int uverbs_process_idrs_arr_attr(struct ib_uverbs_file *ufile,
+					struct uverbs_objs_arr_attr *attr,
+					const struct ib_uverbs_attr *uattr,
+					const struct uverbs_attr_spec *spec)
+{
+	const struct uverbs_object_spec *object;
+	int err;
+	int i = 0; /* Initialization for error flow */
+
+	if (!ufile->ucontext || uattr->attr_data.reserved)
+		return -EINVAL;
+
+	if (uattr->len % sizeof(u32))
+		return -EINVAL;
+
+	attr->len = uattr->len / sizeof(u32);
+
+	if (attr->len < spec->u2.objs_arr.min_len ||
+	    attr->len > spec->u2.objs_arr.max_len)
+		return -EINVAL;
+
+	attr->uobjects = kvmalloc_array(attr->len, sizeof(*attr->uobjects),
+					GFP_KERNEL);
+	if (!attr->uobjects)
+		return -ENOMEM;
+
+	/* Since idr is 4B and *uobjects is >= 4B, we can use
+	 * attr->uobjects to store idrs array and avoid additional memory
+	 * allocation. The idrs array is offset to the end of the uobjects
+	 * array so we will be able to read a 4B idr and replace with a
+	 * 8B pointer.
+	 */
+	if (uattr->len > sizeof(uattr->data)) {
+		err = copy_from_user((u8 *)attr->uobjects + uattr->len,
+				     u64_to_user_ptr(uattr->data),
+				     uattr->len);
+		if (err) {
+			err = -EFAULT;
+			goto err_objs_arr;
+		}
+	} else {
+		memcpy((u8 *)attr->uobjects + uattr->len, &uattr->data,
+		       uattr->len);
+	}
+
+	object = uverbs_get_object(ufile, spec->u2.objs_arr.obj_type);
+	if (!object) {
+		err = -EINVAL;
+		goto err_objs_arr;
+	}
+
+	for (i = 0; i < attr->len; i++) {
+		attr->uobjects[i] =
+			uverbs_get_uobject_from_file(object->type_attrs, ufile,
+						     spec->u2.objs_arr.access,
+						     ((u32 *)attr->uobjects)[attr->len + i]);
+		if (IS_ERR(attr->uobjects[i])) {
+			err = PTR_ERR(attr->uobjects[i]);
+			goto err_objs_arr;
+		}
+	}
+
+	return 0;
+
+err_objs_arr:
+	while (i > 0)
+		uverbs_finalize_object(attr->uobjects[--i],
+				       spec->u2.objs_arr.access, false);
+
+	kvfree(attr->uobjects);
+	return err;
+}
+
 static int uverbs_process_attr(struct ib_uverbs_file *ufile,
 			       const struct ib_uverbs_attr *uattr,
 			       u16 attr_id,
@@ -59,6 +132,7 @@ static int uverbs_process_attr(struct ib_uverbs_file *ufile,
 	const struct uverbs_object_spec *object;
 	struct uverbs_obj_attr *o_attr;
 	struct uverbs_attr *elements = attr_bundle_h->attrs;
+	int err;
 
 	if (attr_id >= attr_spec_bucket->num_attrs) {
 		if (uattr->flags & UVERBS_ATTR_F_MANDATORY)
@@ -176,6 +250,14 @@ static int uverbs_process_attr(struct ib_uverbs_file *ufile,
 		}
 
 		break;
+
+	case UVERBS_ATTR_TYPE_IDRS_ARRAY:
+		err = uverbs_process_idrs_arr_attr(ufile, &e->objs_arr_attr,
+						   uattr, spec);
+		if (err)
+			return err;
+
+		break;
 	default:
 		return -EOPNOTSUPP;
 	}
@@ -204,6 +286,7 @@ static int uverbs_finalize_attrs(struct uverbs_attr_bundle *attrs_bundle,
 		for (j = 0; j < curr_bundle->num_attrs; j++) {
 			struct uverbs_attr *attr;
 			const struct uverbs_attr_spec *spec;
+			int current_ret;
 
 			if (!uverbs_attr_is_valid_in_hash(curr_bundle, j))
 				continue;
@@ -213,8 +296,6 @@ static int uverbs_finalize_attrs(struct uverbs_attr_bundle *attrs_bundle,
 
 			if (spec->type == UVERBS_ATTR_TYPE_IDR ||
 			    spec->type == UVERBS_ATTR_TYPE_FD) {
-				int current_ret;
-
 				current_ret = uverbs_finalize_object(
 					attr->obj_attr.uobject,
 					spec->u.obj.access, commit);
@@ -224,6 +305,15 @@ static int uverbs_finalize_attrs(struct uverbs_attr_bundle *attrs_bundle,
 				   spec->alloc_and_copy &&
 				   !uverbs_attr_ptr_is_inline(attr)) {
 				kvfree(attr->ptr_attr.ptr);
+			} else if (spec->type == UVERBS_ATTR_TYPE_IDRS_ARRAY) {
+				for (i = 0; i < attr->objs_arr_attr.len; i++) {
+					current_ret =
+						uverbs_finalize_object(attr->objs_arr_attr.uobjects[i],
+								       spec->u2.objs_arr.access, commit);
+					if (!ret)
+						ret = current_ret;
+				}
+				kvfree(attr->objs_arr_attr.uobjects);
 			}
 		}
 	}
diff --git a/include/rdma/uverbs_ioctl.h b/include/rdma/uverbs_ioctl.h
index f703c8ebbb02..6ab75235940b 100644
--- a/include/rdma/uverbs_ioctl.h
+++ b/include/rdma/uverbs_ioctl.h
@@ -52,6 +52,7 @@ enum uverbs_attr_type {
 	UVERBS_ATTR_TYPE_IDR,
 	UVERBS_ATTR_TYPE_FD,
 	UVERBS_ATTR_TYPE_ENUM_IN,
+	UVERBS_ATTR_TYPE_IDRS_ARRAY,
 };
 
 enum uverbs_obj_access {
@@ -101,7 +102,7 @@ struct uverbs_attr_spec {
 		} enum_def;
 	} u;
 
-	/* This weird split of the enum lets us remove some padding */
+	/* This weird split lets us remove some padding */
 	union {
 		struct {
 			/*
@@ -111,6 +112,17 @@ struct uverbs_attr_spec {
 			 */
 			const struct uverbs_attr_spec *ids;
 		} enum_def;
+
+		struct {
+			/*
+			 * higher bits mean the namespace and lower bits mean
+			 * the type id within the namespace.
+			 */
+			u16				obj_type;
+			u16				min_len;
+			u16				max_len;
+			u8				access;
+		} objs_arr;
 	} u2;
 };
 
@@ -226,6 +238,27 @@ struct uverbs_object_tree_def {
 #define UA_MANDATORY .mandatory = 1
 #define UA_OPTIONAL .mandatory = 0
 
+/* min_len must be bigger than 0 and _max_len must be smaller than 4095.
+ * Only READ\WRITE accesses are supported.
+ */
+#define UVERBS_ATTR_IDRS_ARR(_attr_id, _idr_type, _access, _min_len, _max_len, \
+			     ...)                                              \
+	(&(const struct uverbs_attr_def){                                      \
+		.id = (_attr_id) +                                             \
+		      BUILD_BUG_ON_ZERO((_min_len) == 0 ||                     \
+					(_max_len) > 4095 ||                   \
+					(_min_len) > (_max_len) ||             \
+					(_access) == UVERBS_ACCESS_NEW ||      \
+					(_access) == UVERBS_ACCESS_DESTROY),   \
+		.attr = {                                                      \
+			.type = UVERBS_ATTR_TYPE_IDRS_ARRAY,                   \
+			.u2.objs_arr.obj_type = _idr_type,                     \
+			.u2.objs_arr.access = _access,                         \
+			.u2.objs_arr.min_len = _min_len,                       \
+			.u2.objs_arr.max_len = _max_len,                       \
+			__VA_ARGS__                                            \
+		} })
+
 #define UVERBS_ATTR_IDR(_attr_id, _idr_type, _access, ...)                     \
 	(&(const struct uverbs_attr_def){                                      \
 		.id = _attr_id,                                                \
@@ -341,6 +374,11 @@ struct uverbs_obj_attr {
 	struct ib_uobject		*uobject;
 };
 
+struct uverbs_objs_arr_attr {
+	struct ib_uobject	**uobjects;
+	u16			len;
+};
+
 struct uverbs_attr {
 	/*
 	 * pointer to the user-space given attribute, in order to write the
@@ -350,6 +388,7 @@ struct uverbs_attr {
 	union {
 		struct uverbs_ptr_attr	ptr_attr;
 		struct uverbs_obj_attr	obj_attr;
+		struct uverbs_objs_arr_attr	objs_arr_attr;
 	};
 };
 
@@ -445,6 +484,33 @@ uverbs_attr_get_len(const struct uverbs_attr_bundle *attrs_bundle, u16 idx)
 	return attr->ptr_attr.len;
 }
 
+/*
+ * uverbs_attr_get_uobjs_arr - Provides array's properties for attribute for
+ * UVERBS_ATTR_TYPE_IDRS_ARRAY.
+ * @***arr: Returned pointer to array of pointers for uobjects or NULL if
+ * attribute isn't provided.
+ *
+ * Returns:
+ * If attribute isn't provided - return 0. Otherwise, return the array
+ * length.
+ */
+static inline int uverbs_attr_get_uobjs_arr(const struct uverbs_attr_bundle *attrs_bundle,
+					    u16 attr_idx,
+					    struct ib_uobject ***arr)
+{
+	const struct uverbs_attr *attr =
+			uverbs_attr_get(attrs_bundle, attr_idx);
+
+	if (IS_ERR(attr)) {
+		*arr = NULL;
+		return 0;
+	}
+
+	*arr = attr->objs_arr_attr.uobjects;
+
+	return attr->objs_arr_attr.len;
+}
+
 static inline int uverbs_copy_to(const struct uverbs_attr_bundle *attrs_bundle,
 				 size_t idx, const void *from, size_t size)
 {
diff --git a/include/uapi/rdma/rdma_user_ioctl_cmds.h b/include/uapi/rdma/rdma_user_ioctl_cmds.h
index 24800c6c1f32..95762b04a72d 100644
--- a/include/uapi/rdma/rdma_user_ioctl_cmds.h
+++ b/include/uapi/rdma/rdma_user_ioctl_cmds.h
@@ -53,7 +53,7 @@ enum {
 
 struct ib_uverbs_attr {
 	__u16 attr_id;		/* command specific type attribute */
-	__u16 len;		/* only for pointers */
+	__u16 len;		/* only for pointers and IDRs array */
 	__u16 flags;		/* combination of UVERBS_ATTR_F_XXXX */
 	union {
 		struct {
-- 
2.14.4

^ permalink raw reply related

* [PATCH rdma-next 23/27] RDMA/mlx5: Refactor flow action parsing to be more generic
From: Leon Romanovsky @ 2018-07-29 12:59 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Leon Romanovsky, RDMA mailing list, Guy Levi, Mark Bloch,
	Or Gerlitz, Saeed Mahameed, linux-netdev
In-Reply-To: <20180729125905.31989-1-leon@kernel.org>

From: Mark Bloch <markb@mellanox.com>

Make the parsing of flow actions more generic so it could be used by
DEVX create flow.

Signed-off-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/hw/mlx5/main.c    | 13 +++++++------
 drivers/infiniband/hw/mlx5/mlx5_ib.h |  3 +++
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 0af0bdc5804b..81780beeb83c 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -2452,17 +2452,16 @@ static int check_mpls_supp_fields(u32 field_support, const __be32 *set_mask)
 		   offsetof(typeof(filter), field) -\
 		   sizeof(filter.field))
 
-static int parse_flow_flow_action(const union ib_flow_spec *ib_spec,
-				  const struct ib_flow_attr *flow_attr,
-				  struct mlx5_flow_act *action)
+int parse_flow_flow_action(struct mlx5_ib_flow_action *maction,
+			   bool is_egress,
+			   struct mlx5_flow_act *action)
 {
-	struct mlx5_ib_flow_action *maction = to_mflow_act(ib_spec->action.act);
 
 	switch (maction->ib_action.type) {
 	case IB_FLOW_ACTION_ESP:
 		/* Currently only AES_GCM keymat is supported by the driver */
 		action->esp_id = (uintptr_t)maction->esp_aes_gcm.ctx;
-		action->action |= flow_attr->flags & IB_FLOW_ATTR_FLAGS_EGRESS ?
+		action->action |= is_egress ?
 			MLX5_FLOW_CONTEXT_ACTION_ENCRYPT :
 			MLX5_FLOW_CONTEXT_ACTION_DECRYPT;
 		return 0;
@@ -2822,7 +2821,9 @@ static int parse_flow_attr(struct mlx5_core_dev *mdev, u32 *match_c,
 		action->action |= MLX5_FLOW_CONTEXT_ACTION_DROP;
 		break;
 	case IB_FLOW_SPEC_ACTION_HANDLE:
-		ret = parse_flow_flow_action(ib_spec, flow_attr, action);
+		ret = parse_flow_flow_action(to_mflow_act(ib_spec->action.act),
+					     flow_attr->flags & IB_FLOW_ATTR_FLAGS_EGRESS,
+					     action);
 		if (ret)
 			return ret;
 		break;
diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h b/drivers/infiniband/hw/mlx5/mlx5_ib.h
index bb7a902a347f..97fa894deafc 100644
--- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
+++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
@@ -870,6 +870,9 @@ to_mcounters(struct ib_counters *ibcntrs)
 	return container_of(ibcntrs, struct mlx5_ib_mcounters, ibcntrs);
 }
 
+int parse_flow_flow_action(struct mlx5_ib_flow_action *maction,
+			   bool is_egress,
+			   struct mlx5_flow_act *action);
 struct mlx5_ib_dev {
 	struct ib_device		ib_dev;
 	struct mlx5_core_dev		*mdev;
-- 
2.14.4

^ permalink raw reply related

* [PATCH rdma-next 24/27] RDMA/mlx5: Refactor DEVX flow creation
From: Leon Romanovsky @ 2018-07-29 12:59 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Leon Romanovsky, RDMA mailing list, Guy Levi, Mark Bloch,
	Or Gerlitz, Saeed Mahameed, linux-netdev
In-Reply-To: <20180729125905.31989-1-leon@kernel.org>

From: Mark Bloch <markb@mellanox.com>

Move struct mlx5_flow_act to be passed from the METHOD entry point,
this will allow to add support for flow action for the DEVX path.

Signed-off-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/hw/mlx5/flow.c    |  4 +++-
 drivers/infiniband/hw/mlx5/main.c    | 12 +++++++-----
 drivers/infiniband/hw/mlx5/mlx5_ib.h |  4 +++-
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/drivers/infiniband/hw/mlx5/flow.c b/drivers/infiniband/hw/mlx5/flow.c
index a6b4f37a5359..072b8fc7e057 100644
--- a/drivers/infiniband/hw/mlx5/flow.c
+++ b/drivers/infiniband/hw/mlx5/flow.c
@@ -44,6 +44,7 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_CREATE_FLOW)(
 	struct ib_device *ib_dev, struct ib_uverbs_file *file,
 	struct uverbs_attr_bundle *attrs)
 {
+	struct mlx5_flow_act flow_act = {.flow_tag = MLX5_FS_DEFAULT_FLOW_TAG};
 	struct mlx5_ib_flow_handler *flow_handler;
 	struct mlx5_ib_flow_matcher *fs_matcher;
 	void *devx_obj;
@@ -106,7 +107,8 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_CREATE_FLOW)(
 				    MLX5_IB_ATTR_CREATE_FLOW_MATCH_VALUE);
 	fs_matcher = uverbs_attr_get_obj(attrs,
 					 MLX5_IB_ATTR_CREATE_FLOW_MATCHER);
-	flow_handler = mlx5_ib_raw_fs_rule_add(dev, fs_matcher, cmd_in, inlen,
+	flow_handler = mlx5_ib_raw_fs_rule_add(dev, fs_matcher, &flow_act,
+					       cmd_in, inlen,
 					       dest_id, dest_type);
 	if (IS_ERR(flow_handler))
 		return PTR_ERR(flow_handler);
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 81780beeb83c..2b2af82dc32e 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -3729,10 +3729,10 @@ _create_raw_flow_rule(struct mlx5_ib_dev *dev,
 		      struct mlx5_ib_flow_prio *ft_prio,
 		      struct mlx5_flow_destination *dst,
 		      struct mlx5_ib_flow_matcher  *fs_matcher,
+		      struct mlx5_flow_act *flow_act,
 		      void *cmd_in, int inlen)
 {
 	struct mlx5_ib_flow_handler *handler;
-	struct mlx5_flow_act flow_act = {.flow_tag = MLX5_FS_DEFAULT_FLOW_TAG};
 	struct mlx5_flow_spec *spec;
 	struct mlx5_flow_table *ft = ft_prio->flow_table;
 	int err = 0;
@@ -3751,9 +3751,8 @@ _create_raw_flow_rule(struct mlx5_ib_dev *dev,
 	       fs_matcher->mask_len);
 	spec->match_criteria_enable = fs_matcher->match_criteria_enable;
 
-	flow_act.action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
 	handler->rule = mlx5_add_flow_rules(ft, spec,
-					    &flow_act, dst, 1);
+					    flow_act, dst, 1);
 
 	if (IS_ERR(handler->rule)) {
 		err = PTR_ERR(handler->rule);
@@ -3815,6 +3814,7 @@ static bool raw_fs_is_multicast(struct mlx5_ib_flow_matcher *fs_matcher,
 struct mlx5_ib_flow_handler *
 mlx5_ib_raw_fs_rule_add(struct mlx5_ib_dev *dev,
 			struct mlx5_ib_flow_matcher *fs_matcher,
+			struct mlx5_flow_act *flow_act,
 			void *cmd_in, int inlen, int dest_id,
 			int dest_type)
 {
@@ -3847,13 +3847,15 @@ mlx5_ib_raw_fs_rule_add(struct mlx5_ib_dev *dev,
 	if (dest_type == MLX5_FLOW_DESTINATION_TYPE_TIR) {
 		dst->type = dest_type;
 		dst->tir_num = dest_id;
+		flow_act->action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
 	} else {
 		dst->type = MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE_NUM;
 		dst->ft_num = dest_id;
+		flow_act->action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
 	}
 
-	handler = _create_raw_flow_rule(dev, ft_prio, dst, fs_matcher, cmd_in,
-					inlen);
+	handler = _create_raw_flow_rule(dev, ft_prio, dst, fs_matcher, flow_act,
+					cmd_in, inlen);
 
 	if (IS_ERR(handler)) {
 		err = PTR_ERR(handler);
diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h b/drivers/infiniband/hw/mlx5/mlx5_ib.h
index 97fa894deafc..76f1c178cef7 100644
--- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
+++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
@@ -39,6 +39,7 @@
 #include <rdma/ib_smi.h>
 #include <linux/mlx5/driver.h>
 #include <linux/mlx5/cq.h>
+#include <linux/mlx5/fs.h>
 #include <linux/mlx5/qp.h>
 #include <linux/mlx5/srq.h>
 #include <linux/types.h>
@@ -1249,7 +1250,8 @@ void mlx5_ib_devx_destroy(struct mlx5_ib_dev *dev,
 const struct uverbs_object_tree_def *mlx5_ib_get_devx_tree(void);
 struct mlx5_ib_flow_handler *mlx5_ib_raw_fs_rule_add(
 	struct mlx5_ib_dev *dev, struct mlx5_ib_flow_matcher *fs_matcher,
-	void *cmd_in, int inlen, int dest_id, int dest_type);
+	struct mlx5_flow_act *flow_act, void *cmd_in, int inlen,
+	int dest_id, int dest_type);
 bool mlx5_ib_devx_is_flow_dest(void *obj, int *dest_id, int *dest_type);
 int mlx5_ib_get_flow_trees(const struct uverbs_object_tree_def **root);
 void mlx5_ib_destroy_flow_action_raw(struct mlx5_ib_flow_action *maction);
-- 
2.14.4

^ permalink raw reply related

* [PATCH rdma-next 25/27] RDMA/mlx5: Add flow actions support to DEVX create flow
From: Leon Romanovsky @ 2018-07-29 12:59 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Leon Romanovsky, RDMA mailing list, Guy Levi, Mark Bloch,
	Or Gerlitz, Saeed Mahameed, linux-netdev
In-Reply-To: <20180729125905.31989-1-leon@kernel.org>

From: Mark Bloch <markb@mellanox.com>

Support attaching flow actions to a flow rule via DEVX.
For now only NIC RX path is supported.

Signed-off-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/hw/mlx5/flow.c        | 21 ++++++++++++++++++++-
 include/uapi/rdma/mlx5_user_ioctl_cmds.h |  1 +
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/mlx5/flow.c b/drivers/infiniband/hw/mlx5/flow.c
index 072b8fc7e057..b254b55e8de0 100644
--- a/drivers/infiniband/hw/mlx5/flow.c
+++ b/drivers/infiniband/hw/mlx5/flow.c
@@ -47,6 +47,7 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_CREATE_FLOW)(
 	struct mlx5_flow_act flow_act = {.flow_tag = MLX5_FS_DEFAULT_FLOW_TAG};
 	struct mlx5_ib_flow_handler *flow_handler;
 	struct mlx5_ib_flow_matcher *fs_matcher;
+	struct ib_uobject **arr_flow_actions;
 	void *devx_obj;
 	int dest_id, dest_type;
 	void *cmd_in;
@@ -56,6 +57,9 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_CREATE_FLOW)(
 	struct ib_uobject *uobj =
 		uverbs_attr_get_uobject(attrs, MLX5_IB_ATTR_CREATE_FLOW_HANDLE);
 	struct mlx5_ib_dev *dev = to_mdev(uobj->context->device);
+	int len;
+	int ret;
+	int i;
 
 	if (!capable(CAP_NET_RAW))
 		return -EPERM;
@@ -107,6 +111,18 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_CREATE_FLOW)(
 				    MLX5_IB_ATTR_CREATE_FLOW_MATCH_VALUE);
 	fs_matcher = uverbs_attr_get_obj(attrs,
 					 MLX5_IB_ATTR_CREATE_FLOW_MATCHER);
+
+	len = uverbs_attr_get_uobjs_arr(attrs,
+					MLX5_IB_ATTR_CREATE_FLOW_ARR_FLOW_ACTIONS,
+					&arr_flow_actions);
+	for (i = 0; i < len; i++) {
+		struct mlx5_ib_flow_action *maction = to_mflow_act(arr_flow_actions[i]->object);
+
+		ret = parse_flow_flow_action(maction, false, &flow_act);
+		if (ret)
+			return -EINVAL;
+	}
+
 	flow_handler = mlx5_ib_raw_fs_rule_add(dev, fs_matcher, &flow_act,
 					       cmd_in, inlen,
 					       dest_id, dest_type);
@@ -458,7 +474,10 @@ DECLARE_UVERBS_NAMED_METHOD(
 			UVERBS_ACCESS_READ),
 	UVERBS_ATTR_IDR(MLX5_IB_ATTR_CREATE_FLOW_DEST_DEVX,
 			MLX5_IB_OBJECT_DEVX_OBJ,
-			UVERBS_ACCESS_READ));
+			UVERBS_ACCESS_READ),
+	UVERBS_ATTR_IDRS_ARR(MLX5_IB_ATTR_CREATE_FLOW_ARR_FLOW_ACTIONS,
+			     UVERBS_OBJECT_FLOW_ACTION,
+			     UVERBS_ACCESS_READ, 1, 1));
 
 DECLARE_UVERBS_NAMED_METHOD_DESTROY(
 	MLX5_IB_METHOD_DESTROY_FLOW,
diff --git a/include/uapi/rdma/mlx5_user_ioctl_cmds.h b/include/uapi/rdma/mlx5_user_ioctl_cmds.h
index 75c7093fd95b..91c3d42ebd0f 100644
--- a/include/uapi/rdma/mlx5_user_ioctl_cmds.h
+++ b/include/uapi/rdma/mlx5_user_ioctl_cmds.h
@@ -155,6 +155,7 @@ enum mlx5_ib_create_flow_attrs {
 	MLX5_IB_ATTR_CREATE_FLOW_DEST_QP,
 	MLX5_IB_ATTR_CREATE_FLOW_DEST_DEVX,
 	MLX5_IB_ATTR_CREATE_FLOW_MATCHER,
+	MLX5_IB_ATTR_CREATE_FLOW_ARR_FLOW_ACTIONS,
 };
 
 enum mlx5_ib_destoy_flow_attrs {
-- 
2.14.4

^ permalink raw reply related

* [PATCH rdma-next 17/27] RDMA/mlx5: Add new flow action verb, packet reformat
From: Leon Romanovsky @ 2018-07-29 12:58 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Leon Romanovsky, RDMA mailing list, Guy Levi, Mark Bloch,
	Or Gerlitz, Saeed Mahameed, linux-netdev
In-Reply-To: <20180729125905.31989-1-leon@kernel.org>

From: Mark Bloch <markb@mellanox.com>

For now, only add L2_TUNNEL_TO_L2 option, for example this can be used
to decap VXLAN packets.

Signed-off-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/hw/mlx5/flow.c         | 76 ++++++++++++++++++++++++++++++-
 drivers/infiniband/hw/mlx5/mlx5_ib.h      |  1 +
 include/uapi/rdma/mlx5_user_ioctl_cmds.h  |  7 +++
 include/uapi/rdma/mlx5_user_ioctl_verbs.h |  4 ++
 4 files changed, 87 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/mlx5/flow.c b/drivers/infiniband/hw/mlx5/flow.c
index d0325e468801..0fea98cb7d42 100644
--- a/drivers/infiniband/hw/mlx5/flow.c
+++ b/drivers/infiniband/hw/mlx5/flow.c
@@ -202,6 +202,8 @@ void mlx5_ib_destroy_flow_action_raw(struct mlx5_ib_flow_action *maction)
 		mlx5_modify_header_dealloc(maction->flow_action_raw.dev->mdev,
 					   maction->flow_action_raw.action_id);
 		break;
+	case MLX5_IB_FLOW_ACTION_DECAP:
+		break;
 	default:
 		WARN_ON(true);
 		break;
@@ -284,6 +286,64 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_FLOW_ACTION_CREATE_MODIFY_HEADER)(struc
 	return 0;
 }
 
+static bool mlx5_ib_flow_action_packet_reformat_valid(struct mlx5_ib_dev *ibdev,
+						      u8 packet_reformat_type,
+						      u8 ft_type)
+{
+	switch (packet_reformat_type) {
+	case MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2:
+		if (ft_type == MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_RX)
+			return MLX5_CAP_FLOWTABLE_NIC_RX(ibdev->mdev, decap);
+		break;
+	default:
+		break;
+	}
+
+	return false;
+}
+
+static int UVERBS_HANDLER(MLX5_IB_METHOD_FLOW_ACTION_CREATE_PACKET_REFORMAT)(struct ib_device *ib_dev,
+									     struct ib_uverbs_file *file,
+									     struct uverbs_attr_bundle *attrs)
+{
+	struct ib_uobject *uobj = uverbs_attr_get_uobject(attrs,
+				       MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_HANDLE);
+	struct mlx5_ib_dev *mdev = to_mdev(uobj->context->device);
+	enum mlx5_ib_uapi_flow_action_packet_reformat_type dv_prt;
+	enum mlx5_ib_uapi_flow_table_type ft_type;
+	struct mlx5_ib_flow_action *maction;
+	int ret;
+
+	ret = uverbs_get_const(&ft_type, attrs,
+			       MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_FT_TYPE);
+	if (ret)
+		return -EINVAL;
+
+	ret = uverbs_get_const(&dv_prt, attrs,
+			       MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_TYPE);
+	if (ret)
+		return -EINVAL;
+
+	if (!mlx5_ib_flow_action_packet_reformat_valid(mdev, dv_prt, ft_type))
+		return -EOPNOTSUPP;
+
+	maction = kzalloc(sizeof(*maction), GFP_KERNEL);
+	if (!maction)
+		return -ENOMEM;
+
+	if (dv_prt ==
+	    MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2) {
+		maction->flow_action_raw.sub_type =
+			MLX5_IB_FLOW_ACTION_DECAP;
+		maction->flow_action_raw.dev = mdev;
+	}
+
+	uverbs_flow_action_fill_action(&maction->ib_action, uobj,
+				       uobj->context->device,
+				       IB_FLOW_ACTION_UNSPECIFIED);
+	return 0;
+}
+
 DECLARE_UVERBS_NAMED_METHOD(
 	MLX5_IB_METHOD_CREATE_FLOW,
 	UVERBS_ATTR_IDR(MLX5_IB_ATTR_CREATE_FLOW_HANDLE,
@@ -332,9 +392,23 @@ DECLARE_UVERBS_NAMED_METHOD(
 			     enum mlx5_ib_uapi_flow_table_type,
 			     UA_MANDATORY));
 
+DECLARE_UVERBS_NAMED_METHOD(
+	MLX5_IB_METHOD_FLOW_ACTION_CREATE_PACKET_REFORMAT,
+	UVERBS_ATTR_IDR(MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_HANDLE,
+			UVERBS_OBJECT_FLOW_ACTION,
+			UVERBS_ACCESS_NEW,
+			UA_MANDATORY),
+	UVERBS_ATTR_CONST_IN(MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_TYPE,
+			     enum mlx5_ib_uapi_flow_action_packet_reformat_type,
+			     UA_MANDATORY),
+	UVERBS_ATTR_CONST_IN(MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_FT_TYPE,
+			     enum mlx5_ib_uapi_flow_table_type,
+			     UA_MANDATORY));
+
 ADD_UVERBS_METHODS(mlx5_ib_flow_actions,
 		   UVERBS_OBJECT_FLOW_ACTION,
-		   &UVERBS_METHOD(MLX5_IB_METHOD_FLOW_ACTION_CREATE_MODIFY_HEADER));
+		   &UVERBS_METHOD(MLX5_IB_METHOD_FLOW_ACTION_CREATE_MODIFY_HEADER),
+		   &UVERBS_METHOD(MLX5_IB_METHOD_FLOW_ACTION_CREATE_PACKET_REFORMAT));
 
 DECLARE_UVERBS_NAMED_METHOD(
 	MLX5_IB_METHOD_FLOW_MATCHER_CREATE,
diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h b/drivers/infiniband/hw/mlx5/mlx5_ib.h
index b5dd68114588..856cb389c821 100644
--- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
+++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
@@ -153,6 +153,7 @@ struct mlx5_ib_pd {
 
 enum {
 	MLX5_IB_FLOW_ACTION_MODIFY_HEADER,
+	MLX5_IB_FLOW_ACTION_DECAP,
 };
 
 #define MLX5_IB_FLOW_MCAST_PRIO		(MLX5_BY_PASS_NUM_PRIOS - 1)
diff --git a/include/uapi/rdma/mlx5_user_ioctl_cmds.h b/include/uapi/rdma/mlx5_user_ioctl_cmds.h
index 9c83e13c0e89..40db7fca3d0b 100644
--- a/include/uapi/rdma/mlx5_user_ioctl_cmds.h
+++ b/include/uapi/rdma/mlx5_user_ioctl_cmds.h
@@ -168,6 +168,7 @@ enum mlx5_ib_flow_methods {
 
 enum mlx5_ib_flow_action_methods {
 	MLX5_IB_METHOD_FLOW_ACTION_CREATE_MODIFY_HEADER = (1U << UVERBS_ID_NS_SHIFT),
+	MLX5_IB_METHOD_FLOW_ACTION_CREATE_PACKET_REFORMAT,
 };
 
 enum mlx5_ib_create_flow_action_create_modify_header_attrs {
@@ -176,4 +177,10 @@ enum mlx5_ib_create_flow_action_create_modify_header_attrs {
 	MLX5_IB_ATTR_CREATE_MODIFY_HEADER_FT_TYPE,
 };
 
+enum mlx5_ib_create_flow_action_create_packet_reformat_attrs {
+	MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+	MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_TYPE,
+	MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_FT_TYPE,
+};
+
 #endif
diff --git a/include/uapi/rdma/mlx5_user_ioctl_verbs.h b/include/uapi/rdma/mlx5_user_ioctl_verbs.h
index ceb6d0d8529a..b5fda0fcd484 100644
--- a/include/uapi/rdma/mlx5_user_ioctl_verbs.h
+++ b/include/uapi/rdma/mlx5_user_ioctl_verbs.h
@@ -44,5 +44,9 @@ enum mlx5_ib_uapi_flow_table_type {
 	MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_TX	= 0x1,
 };
 
+enum mlx5_ib_uapi_flow_action_packet_reformat_type {
+	MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2 = 0x0,
+};
+
 #endif
 
-- 
2.14.4

^ permalink raw reply related

* [PATCH rdma-next 27/27] RDMA/mlx5: Allow creating a matcher for a NIC TX flow table
From: Leon Romanovsky @ 2018-07-29 12:59 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Leon Romanovsky, RDMA mailing list, Guy Levi, Mark Bloch,
	Or Gerlitz, Saeed Mahameed, linux-netdev
In-Reply-To: <20180729125905.31989-1-leon@kernel.org>

From: Mark Bloch <markb@mellanox.com>

Currently a matcher can only be created and attached to a NIC RX flow
table. Extend it to allow it on NIC TX flow tables as well.

In order to achieve that, We:

1) Expose a new attribute: MLX5_IB_ATTR_FLOW_MATCHER_FLOW_FLAGS.
   enum ib_flow_flags is used as valid flags. Only
   IB_FLOW_ATTR_FLAGS_EGRESS is supported.

2) Remove the requirement to have a DEVX or QP destination when creating a
   flow. A flow added to NIC TX flow table will forward the packet outside
   of the vport (Wire or E-Switch in the SR-iOV case).

Only a single flow action can be attached to a flow rule at the moment.

Signed-off-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/hw/mlx5/flow.c        | 62 +++++++++++++++++++++-----------
 drivers/infiniband/hw/mlx5/main.c        |  5 ++-
 include/uapi/rdma/mlx5_user_ioctl_cmds.h |  1 +
 3 files changed, 46 insertions(+), 22 deletions(-)

diff --git a/drivers/infiniband/hw/mlx5/flow.c b/drivers/infiniband/hw/mlx5/flow.c
index 2422629f48c9..26c5112100e6 100644
--- a/drivers/infiniband/hw/mlx5/flow.c
+++ b/drivers/infiniband/hw/mlx5/flow.c
@@ -18,6 +18,22 @@
 #define UVERBS_MODULE_NAME mlx5_ib
 #include <rdma/uverbs_named_ioctl.h>
 
+static int mlx5_ib_ft_type_to_namespace(u8 table_type, u8 *namespace)
+{
+	switch (table_type) {
+	case MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_RX:
+		*namespace = MLX5_FLOW_NAMESPACE_BYPASS;
+		break;
+	case MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_TX:
+		*namespace = MLX5_FLOW_NAMESPACE_EGRESS;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 static const struct uverbs_attr_spec mlx5_ib_flow_type[] = {
 	[MLX5_IB_FLOW_TYPE_NORMAL] = {
 		.type = UVERBS_ATTR_TYPE_PTR_IN,
@@ -69,7 +85,14 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_CREATE_FLOW)(
 	dest_qp = uverbs_attr_is_valid(attrs,
 				       MLX5_IB_ATTR_CREATE_FLOW_DEST_QP);
 
-	if ((dest_devx && dest_qp) || (!dest_devx && !dest_qp))
+	fs_matcher = uverbs_attr_get_obj(attrs,
+					 MLX5_IB_ATTR_CREATE_FLOW_MATCHER);
+	if (fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_BYPASS &&
+	    ((dest_devx && dest_qp) || (!dest_devx && !dest_qp)))
+		return -EINVAL;
+
+	if (fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_EGRESS &&
+	    (dest_devx || dest_qp))
 		return -EINVAL;
 
 	if (dest_devx) {
@@ -83,7 +106,7 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_CREATE_FLOW)(
 		 */
 		if (!mlx5_ib_devx_is_flow_dest(devx_obj, &dest_id, &dest_type))
 			return -EINVAL;
-	} else {
+	} else if (dest_qp) {
 		struct mlx5_ib_qp *mqp;
 
 		qp = uverbs_attr_get_obj(attrs,
@@ -100,6 +123,8 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_CREATE_FLOW)(
 		else
 			dest_id = mqp->raw_packet_qp.rq.tirn;
 		dest_type = MLX5_FLOW_DESTINATION_TYPE_TIR;
+	} else {
+		dest_type = MLX5_FLOW_DESTINATION_TYPE_PORT;
 	}
 
 	if (dev->rep)
@@ -109,8 +134,6 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_CREATE_FLOW)(
 		attrs, MLX5_IB_ATTR_CREATE_FLOW_MATCH_VALUE);
 	inlen = uverbs_attr_get_len(attrs,
 				    MLX5_IB_ATTR_CREATE_FLOW_MATCH_VALUE);
-	fs_matcher = uverbs_attr_get_obj(attrs,
-					 MLX5_IB_ATTR_CREATE_FLOW_MATCHER);
 
 	len = uverbs_attr_get_uobjs_arr(attrs,
 					MLX5_IB_ATTR_CREATE_FLOW_ARR_FLOW_ACTIONS,
@@ -156,6 +179,7 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_FLOW_MATCHER_CREATE)(
 		attrs, MLX5_IB_ATTR_FLOW_MATCHER_CREATE_HANDLE);
 	struct mlx5_ib_dev *dev = to_mdev(uobj->context->device);
 	struct mlx5_ib_flow_matcher *obj;
+	u32 flags;
 	int err;
 
 	obj = kzalloc(sizeof(struct mlx5_ib_flow_matcher), GFP_KERNEL);
@@ -188,6 +212,16 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_FLOW_MATCHER_CREATE)(
 	if (err)
 		goto end;
 
+	err = uverbs_get_flags32(&flags, attrs,
+				 MLX5_IB_ATTR_FLOW_MATCHER_FLOW_FLAGS,
+				 IB_FLOW_ATTR_FLAGS_EGRESS);
+	if (!err && flags) {
+		err = mlx5_ib_ft_type_to_namespace(MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_TX,
+						   &obj->ns_type);
+		if (err)
+			goto end;
+	}
+
 	uobj->object = obj;
 	obj->mdev = dev->mdev;
 	atomic_set(&obj->usecnt, 0);
@@ -198,22 +232,6 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_FLOW_MATCHER_CREATE)(
 	return err;
 }
 
-static int mlx5_ib_ft_type_to_namespace(u8 table_type, u8 *namespace)
-{
-	switch (table_type) {
-	case MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_RX:
-		*namespace = MLX5_FLOW_NAMESPACE_BYPASS;
-		break;
-	case MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_TX:
-		*namespace = MLX5_FLOW_NAMESPACE_EGRESS;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	return 0;
-}
-
 void mlx5_ib_destroy_flow_action_raw(struct mlx5_ib_flow_action *maction)
 {
 	switch (maction->flow_action_raw.sub_type) {
@@ -542,7 +560,9 @@ DECLARE_UVERBS_NAMED_METHOD(
 			    UA_MANDATORY),
 	UVERBS_ATTR_PTR_IN(MLX5_IB_ATTR_FLOW_MATCHER_MATCH_CRITERIA,
 			   UVERBS_ATTR_TYPE(u8),
-			   UA_MANDATORY));
+			   UA_MANDATORY),
+	UVERBS_ATTR_FLAGS_IN(MLX5_IB_ATTR_FLOW_MATCHER_FLOW_FLAGS,
+			     enum ib_flow_flags));
 
 DECLARE_UVERBS_NAMED_METHOD_DESTROY(
 	MLX5_IB_METHOD_FLOW_MATCHER_DESTROY,
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index ba4bcbc3adb6..08bf16161435 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -3866,10 +3866,13 @@ mlx5_ib_raw_fs_rule_add(struct mlx5_ib_dev *dev,
 		dst->type = dest_type;
 		dst->tir_num = dest_id;
 		flow_act->action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
-	} else {
+	} else if (dest_type == MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE) {
 		dst->type = MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE_NUM;
 		dst->ft_num = dest_id;
 		flow_act->action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
+	} else {
+		dst->type = MLX5_FLOW_DESTINATION_TYPE_PORT;
+		flow_act->action |= MLX5_FLOW_CONTEXT_ACTION_ALLOW;
 	}
 
 	handler = _create_raw_flow_rule(dev, ft_prio, dst, fs_matcher, flow_act,
diff --git a/include/uapi/rdma/mlx5_user_ioctl_cmds.h b/include/uapi/rdma/mlx5_user_ioctl_cmds.h
index 91c3d42ebd0f..fb4a8b17cca8 100644
--- a/include/uapi/rdma/mlx5_user_ioctl_cmds.h
+++ b/include/uapi/rdma/mlx5_user_ioctl_cmds.h
@@ -125,6 +125,7 @@ enum mlx5_ib_flow_matcher_create_attrs {
 	MLX5_IB_ATTR_FLOW_MATCHER_MATCH_MASK,
 	MLX5_IB_ATTR_FLOW_MATCHER_FLOW_TYPE,
 	MLX5_IB_ATTR_FLOW_MATCHER_MATCH_CRITERIA,
+	MLX5_IB_ATTR_FLOW_MATCHER_FLOW_FLAGS,
 };
 
 enum mlx5_ib_flow_matcher_destroy_attrs {
-- 
2.14.4

^ permalink raw reply related

* [PATCH rdma-next 26/27] RDMA/mlx5: Add NIC TX namespace when getting a flow table
From: Leon Romanovsky @ 2018-07-29 12:59 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Leon Romanovsky, RDMA mailing list, Guy Levi, Mark Bloch,
	Or Gerlitz, Saeed Mahameed, linux-netdev
In-Reply-To: <20180729125905.31989-1-leon@kernel.org>

From: Mark Bloch <markb@mellanox.com>

Add the ability to get a NIC TX flow table when using _get_flow_table().
This will allow to create a matcher and a flow rule on the NIC TX path.

Signed-off-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
---
 drivers/infiniband/hw/mlx5/flow.c    |  1 +
 drivers/infiniband/hw/mlx5/main.c    | 38 ++++++++++++++++++++++++++----------
 drivers/infiniband/hw/mlx5/mlx5_ib.h |  1 +
 3 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/drivers/infiniband/hw/mlx5/flow.c b/drivers/infiniband/hw/mlx5/flow.c
index b254b55e8de0..2422629f48c9 100644
--- a/drivers/infiniband/hw/mlx5/flow.c
+++ b/drivers/infiniband/hw/mlx5/flow.c
@@ -162,6 +162,7 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_FLOW_MATCHER_CREATE)(
 	if (!obj)
 		return -ENOMEM;
 
+	obj->ns_type = MLX5_FLOW_NAMESPACE_BYPASS;
 	obj->mask_len = uverbs_attr_get_len(
 		attrs, MLX5_IB_ATTR_FLOW_MATCHER_MATCH_MASK);
 	err = uverbs_copy_from(&obj->matcher_mask,
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 2b2af82dc32e..ba4bcbc3adb6 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -3695,33 +3695,52 @@ static struct ib_flow *mlx5_ib_create_flow(struct ib_qp *qp,
 }
 
 static struct mlx5_ib_flow_prio *_get_flow_table(struct mlx5_ib_dev *dev,
-						 int priority, bool mcast)
+						 struct mlx5_ib_flow_matcher *fs_matcher,
+						 bool mcast)
 {
-	int max_table_size;
 	struct mlx5_flow_namespace *ns = NULL;
 	struct mlx5_ib_flow_prio *prio;
+	int max_table_size = 0;
+	u32 flags = 0;
+	int priority;
+
+	if (fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_BYPASS) {
+		max_table_size = BIT(MLX5_CAP_FLOWTABLE_NIC_RX(dev->mdev,
+							       log_max_ft_size));
+		if (MLX5_CAP_FLOWTABLE_NIC_RX(dev->mdev, decap))
+			flags |= MLX5_FLOW_TABLE_TUNNEL_EN_DECAP;
+		if (MLX5_CAP_FLOWTABLE_NIC_RX(dev->mdev,
+					      reformat_l3_tunnel_to_l2))
+			flags |= MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT;
+	} else { /* Can only be MLX5_FLOW_NAMESPACE_EGRESS */
+		max_table_size = BIT(MLX5_CAP_FLOWTABLE_NIC_TX(dev->mdev,
+							       log_max_ft_size));
+		if (MLX5_CAP_FLOWTABLE_NIC_TX(dev->mdev, reformat))
+			flags |= MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT;
+	}
 
-	max_table_size = BIT(MLX5_CAP_FLOWTABLE_NIC_RX(dev->mdev,
-			     log_max_ft_size));
 	if (max_table_size < MLX5_FS_MAX_ENTRIES)
 		return ERR_PTR(-ENOMEM);
 
 	if (mcast)
 		priority = MLX5_IB_FLOW_MCAST_PRIO;
 	else
-		priority = ib_prio_to_core_prio(priority, false);
+		priority = ib_prio_to_core_prio(fs_matcher->priority, false);
 
-	ns = mlx5_get_flow_namespace(dev->mdev, MLX5_FLOW_NAMESPACE_BYPASS);
+	ns = mlx5_get_flow_namespace(dev->mdev, fs_matcher->ns_type);
 	if (!ns)
 		return ERR_PTR(-ENOTSUPP);
 
-	prio = &dev->flow_db->prios[priority];
+	if (fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_BYPASS)
+		prio = &dev->flow_db->prios[priority];
+	else
+		prio = &dev->flow_db->egress_prios[priority];
 
 	if (prio->flow_table)
 		return prio;
 
 	return _get_prio(ns, prio, priority, MLX5_FS_MAX_ENTRIES,
-			 MLX5_FS_MAX_TYPES, 0);
+			 MLX5_FS_MAX_TYPES, flags);
 }
 
 static struct mlx5_ib_flow_handler *
@@ -3820,7 +3839,6 @@ mlx5_ib_raw_fs_rule_add(struct mlx5_ib_dev *dev,
 {
 	struct mlx5_flow_destination *dst;
 	struct mlx5_ib_flow_prio *ft_prio;
-	int priority = fs_matcher->priority;
 	struct mlx5_ib_flow_handler *handler;
 	bool mcast;
 	int err;
@@ -3838,7 +3856,7 @@ mlx5_ib_raw_fs_rule_add(struct mlx5_ib_dev *dev,
 	mcast = raw_fs_is_multicast(fs_matcher, cmd_in);
 	mutex_lock(&dev->flow_db->lock);
 
-	ft_prio = _get_flow_table(dev, priority, mcast);
+	ft_prio = _get_flow_table(dev, fs_matcher, mcast);
 	if (IS_ERR(ft_prio)) {
 		err = PTR_ERR(ft_prio);
 		goto unlock;
diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h b/drivers/infiniband/hw/mlx5/mlx5_ib.h
index 76f1c178cef7..639b5dccf079 100644
--- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
+++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
@@ -187,6 +187,7 @@ struct mlx5_ib_flow_matcher {
 	struct mlx5_ib_match_params matcher_mask;
 	int			mask_len;
 	enum mlx5_ib_flow_type	flow_type;
+	u8			ns_type;
 	u16			priority;
 	struct mlx5_core_dev	*mdev;
 	atomic_t		usecnt;
-- 
2.14.4

^ permalink raw reply related

* New(?) UBSAN warnings in 4.18.0-rc6-00218-ga26fb01c2879 with gcc-8
From: Meelis Roos @ 2018-07-29 14:46 UTC (permalink / raw)
  To: Linux Kernel list; +Cc: netdev

After testing 4.18.0-rc6-00192 successfully with gcc-7, I upgraded my 
Debian unstable to latest gcc (now defaults to gcc-8) and compiled latest git 
4.18.0-rc6-00218-ga26fb01c2879. The new kernel spits out multiple 
UBSAN warnings in different places: in mm, radix-tree and network code. 
I have compilead a coubple of kernels with gcc-8 before but most have 
been 64-bit, this is the first 32-bit one.

[    0.000000] Linux version 4.18.0-rc6-00218-ga26fb01c2879-dirty (mroos@rx100s2) (gcc version 8.2.0 (Debian 8.2.0-1)) #80 SMP Sun Jul 29 14:45:46 EEST 2018
[    0.000000] x86/fpu: x87 FPU will use FXSAVE
[    0.000000] BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009afff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009b000-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000ca000-0x00000000000cbfff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000003ff6ffff] usable
[    0.000000] BIOS-e820: [mem 0x000000003ff70000-0x000000003ff79fff] ACPI data
[    0.000000] BIOS-e820: [mem 0x000000003ff7a000-0x000000003ff7ffff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000003ff80000-0x000000003fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec0ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000ff800000-0x00000000ffbfffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fffffc00-0x00000000ffffffff] reserved
[    0.000000] Notice: NX (Execute Disable) protection missing in CPU!
[    0.000000] SMBIOS 2.3 present.
[    0.000000] DMI: FUJITSU SIEMENS PRIMERGY RX100S2/D1571/M71IXG, BIOS 6.0 Rev. C0F2.1571 04/27/2005
[    0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000000] last_pfn = 0x3ff70 max_arch_pfn = 0x100000
[    0.000000] MTRR default type: uncachable
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
[    0.000000]   A0000-BFFFF uncachable
[    0.000000]   C0000-C7FFF write-protect
[    0.000000]   C8000-DFFFF uncachable
[    0.000000]   E0000-FFFFF write-protect
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 000000000 mask FC0000000 write-back
[    0.000000]   1 base 03FF80000 mask FFFF80000 uncachable
[    0.000000]   2 disabled
[    0.000000]   3 disabled
[    0.000000]   4 disabled
[    0.000000]   5 disabled
[    0.000000]   6 disabled
[    0.000000]   7 disabled
[    0.000000] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WC  UC- UC  
[    0.000000] total RAM covered: 1023M
[    0.000000] Found optimal setting for mtrr clean up
[    0.000000]  gran_size: 64K 	chunk_size: 1M 	num_reg: 2  	lose cover RAM: 0G
[    0.000000] found SMP MP-table at [mem 0x000f6680-0x000f668f] mapped at [(ptrval)]
[    0.000000] initial memory mapped: [mem 0x00000000-0x1dffffff]
[    0.000000] Base memory trampoline at [(ptrval)] 97000 size 16384
[    0.000000] BRK [0x1ddf8000, 0x1ddf8fff] PGTABLE
[    0.000000] ACPI: Early table checksum verification disabled
[    0.000000] ACPI: RSDP 0x00000000000F66B0 000014 (v00 PTLTD )
[    0.000000] ACPI: RSDT 0x000000003FF75B79 000038 (v01 PTLTD    RSDT   06040000  LTP 00000000)
[    0.000000] ACPI: FACP 0x000000003FF79E69 000074 (v01 INTEL  CANTWOOD 06040000 PTL  00000003)
[    0.000000] ACPI: DSDT 0x000000003FF75BB1 0042B8 (v01 INTEL  CANTWOOD 06040000 MSFT 0100000B)
[    0.000000] ACPI: FACS 0x000000003FF7AFC0 000040
[    0.000000] ACPI: SPCR 0x000000003FF79EDD 000050 (v01 PTLTD  $UCRTBL$ 06040000 PTL  00000001)
[    0.000000] ACPI: APIC 0x000000003FF79F2D 000074 (v01 PTLTD  ? APIC   06040000  LTP 00000000)
[    0.000000] ACPI: BOOT 0x000000003FF79FA1 000028 (v01 PTLTD  $SBFTBL$ 06040000  LTP 00000001)
[    0.000000] ACPI: SSDT 0x000000003FF79FC9 000037 (v01 PTLTD  ACPIHT   06040000  LTP 00000001)
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] 135MB HIGHMEM available.
[    0.000000] 887MB LOWMEM available.
[    0.000000]   mapped low ram: 0 - 377fe000
[    0.000000]   low ram: 0 - 377fe000
[    0.000000] tsc: Fast TSC calibration using PIT
[    0.000000] BRK [0x1ddf9000, 0x1ddf9fff] PGTABLE
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]
[    0.000000]   Normal   [mem 0x0000000001000000-0x00000000377fdfff]
[    0.000000]   HighMem  [mem 0x00000000377fe000-0x000000003ff6ffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000001000-0x000000000009afff]
[    0.000000]   node   0: [mem 0x0000000000100000-0x000000003ff6ffff]
[    0.000000] Reserved but unavailable: 102 pages
[    0.000000] Initmem setup node 0 [mem 0x0000000000001000-0x000000003ff6ffff]
[    0.000000] On node 0 totalpages: 261898
[    0.000000]   DMA zone: 36 pages used for memmap
[    0.000000]   DMA zone: 0 pages reserved
[    0.000000]   DMA zone: 3994 pages, LIFO batch:0
[    0.000000]   Normal zone: 1962 pages used for memmap
[    0.000000]   Normal zone: 223230 pages, LIFO batch:31
[    0.000000]   HighMem zone: 34674 pages, LIFO batch:7
[    0.000000] Using APIC driver default
[    0.000000] ACPI: PM-Timer IO Port: 0x1008
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])
[    0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-23
[    0.000000] IOAPIC[1]: apic_id 3, version 32, address 0xfec10000, GSI 24-47
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 high edge)
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[    0.000000] ACPI: IRQ0 used by override.
[    0.000000] ACPI: IRQ9 used by override.
[    0.000000] Using ACPI (MADT) for SMP configuration information
[    0.000000] ACPI: SPCR: SPCR table version 1
[    0.000000] ACPI: SPCR: Unexpected SPCR Access Width.  Defaulting to byte size
[    0.000000] smpboot: Allowing 2 CPUs, 0 hotplug CPUs
[    0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009b000-0x0009ffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000c9fff]
[    0.000000] PM: Registered nosave memory: [mem 0x000ca000-0x000cbfff]
[    0.000000] PM: Registered nosave memory: [mem 0x000cc000-0x000dbfff]
[    0.000000] PM: Registered nosave memory: [mem 0x000dc000-0x000fffff]
[    0.000000] [mem 0x40000000-0xfebfffff] available for PCI devices
[    0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns
[    0.000000] random: get_random_bytes called from start_kernel+0x78/0x3f3 with crng_init=0
[    0.000000] setup_percpu: NR_CPUS:2 nr_cpumask_bits:2 nr_cpu_ids:2 nr_node_ids:1
[    0.000000] percpu: Embedded 28 pages/cpu @(ptrval) s85900 r0 d28788 u114688
[    0.000000] pcpu-alloc: s85900 r0 d28788 u114688 alloc=28*4096
[    0.000000] pcpu-alloc: [0] 0 [0] 1 
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 259900
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.18.0-rc6-00218-ga26fb01c2879-dirty root=/dev/sda1 ro
[    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
[    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Initializing CPU#0
[    0.000000] Initializing HighMem for node 0 (000377fe:0003ff70)
[    0.000000] Initializing Movable for node 0 (00000000:00000000)
[    0.000000] Memory: 1022972K/1047592K available (8195K kernel code, 3428K rwdata, 1196K rodata, 564K init, 332K bss, 24620K reserved, 0K cma-reserved, 138696K highmem)
[    0.000000] virtual kernel memory layout:
                   fixmap  : 0xfff8e000 - 0xfffff000   ( 452 kB)
                 cpu_entry : 0xffc00000 - 0xffc4f000   ( 316 kB)
                   pkmap   : 0xff800000 - 0xffc00000   (4096 kB)
                   vmalloc : 0xf7ffe000 - 0xff7fe000   ( 120 MB)
                   lowmem  : 0xc0000000 - 0xf77fe000   ( 887 MB)
                     .init : 0xddc99000 - 0xddd26000   ( 564 kB)
                     .data : 0xdd800e10 - 0xddc8b080   (4648 kB)
                     .text : 0xdd000000 - 0xdd800e10   (8195 kB)
[    0.000000] Checking if this processor honours the WP bit even in supervisor mode...
[    0.000000] ================================================================================
[    0.000000] UBSAN: Undefined behaviour in arch/x86/mm/fault.c:1225:12
[    0.000000] member access within null pointer of type 'struct mm_struct'
[    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.18.0-rc6-00218-ga26fb01c2879-dirty #80
[    0.000000] Hardware name: FUJITSU SIEMENS PRIMERGY RX100S2/D1571/M71IXG, BIOS 6.0 Rev. C0F2.1571 04/27/2005
[    0.000000] Call Trace:
[    0.000000]  dump_stack+0x55/0x83
[    0.000000]  ubsan_epilogue+0xb/0x33
[    0.000000]  handle_null_ptr_deref+0x77/0x7e
[    0.000000]  __ubsan_handle_type_mismatch_v1+0x54/0x5f
[    0.000000]  __do_page_fault+0x43f/0x4ee
[    0.000000]  ? vmalloc_sync_all+0x2f6/0x2f6
[    0.000000]  do_page_fault+0xb/0xd
[    0.000000]  common_exception+0x6f/0x8a
[    0.000000] EIP: __copy_user_ll+0x40/0xde
[    0.000000] Code: 1d 00 b0 c8 dd 75 2f 89 cb 89 c7 89 d6 83 f9 07 76 18 89 f9 f7 d9 83 e1 07 29 cb f3 a4 89 d9 c1 e9 02 83 e3 03 90 f3 a5 89 d9 <f3> a4 89 c8 90 90 90 5b 5e 5f 5d c3 89 c7 89 d6 8b 46 20 83 f9 43 
[    0.000000] EAX: ffd8e000 EBX: 00000001 ECX: 00000001 EDX: dd933f6b
[    0.000000] ESI: dd933f6b EDI: ffd8e000 EBP: dd933f40 ESP: dd933f34
[    0.000000] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 EFLAGS: 00210097
[    0.000000]  ? memcg_stat_show+0xa8/0x9d1
[    0.000000]  __probe_kernel_write+0x84/0x14d
[    0.000000]  mem_init+0x1b7/0x200
[    0.000000]  start_kernel+0x286/0x3f3
[    0.000000]  i386_start_kernel+0x11a/0x11d
[    0.000000]  startup_32_smp+0x164/0x168
[    0.000000] ================================================================================
[    0.000000] Ok.
[    0.000000] ================================================================================
[    0.000000] UBSAN: Undefined behaviour in lib/radix-tree.c:123:14
[    0.000000] member access within null pointer of type 'const struct radix_tree_node'
[    0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.18.0-rc6-00218-ga26fb01c2879-dirty #80
[    0.000000] Hardware name: FUJITSU SIEMENS PRIMERGY RX100S2/D1571/M71IXG, BIOS 6.0 Rev. C0F2.1571 04/27/2005
[    0.000000] Call Trace:
[    0.000000]  dump_stack+0x55/0x83
[    0.000000]  ubsan_epilogue+0xb/0x33
[    0.000000]  handle_null_ptr_deref+0x77/0x7e
[    0.000000]  __ubsan_handle_type_mismatch_v1+0x54/0x5f
[    0.000000]  ? idr_get_free+0x2ce/0x42a
[    0.000000]  __radix_tree_replace+0x11d/0x122
[    0.000000]  radix_tree_iter_replace+0x28/0x43
[    0.000000]  idr_alloc_u32+0x9e/0xee
[    0.000000]  idr_alloc+0x3c/0x64
[    0.000000]  workqueue_init_early+0x2a5/0x68d
[    0.000000]  start_kernel+0x2b5/0x3f3
[    0.000000]  i386_start_kernel+0x11a/0x11d
[    0.000000]  startup_32_smp+0x164/0x168
[    0.000000] ================================================================================
[    0.000000] Hierarchical RCU implementation.
[    0.000000] NR_IRQS: 2304, nr_irqs: 512, preallocated irqs: 16
[    0.000000] CPU 0 irqstacks, hard=(ptrval) soft=(ptrval)
[    0.000000] Console: colour VGA+ 80x25
[    0.000000] console [tty0] enabled
[    0.000000] ACPI: Core revision 20180531
[    0.004000] APIC: Switch to symmetric I/O mode setup
[    0.004000] Enabling APIC mode:  Flat.  Using 2 I/O APICs
[    0.004000] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
[    0.024000] tsc: Fast TSC calibration using PIT
[    0.028000] tsc: Detected 3400.387 MHz processor
[    0.028000] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x3103bc1e9ad, max_idle_ns: 440795299795 ns
[    0.028000] Calibrating delay loop (skipped), value calculated using timer frequency.. 6800.77 BogoMIPS (lpj=13601548)
[    0.028000] pid_max: default: 32768 minimum: 301
[    0.028000] Security Framework initialized
[    0.028000] AppArmor: AppArmor initialized
[    0.028000] Mount-cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.028000] Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.028000] CPU: Physical Processor ID: 0
[    0.028000] CPU: Processor Core ID: 0
[    0.028000] mce: CPU supports 4 MCE banks
[    0.028000] CPU0: Thermal monitoring enabled (TM1)
[    0.028000] process: using mwait in idle threads
[    0.028000] Last level iTLB entries: 4KB 64, 2MB 64, 4MB 64
[    0.028000] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 64, 1GB 0
[    0.028000] Spectre V2 : Mitigation: Full generic retpoline
[    0.032004] Spectre V2 : Spectre v2 mitigation: Filling RSB on context switch
[    0.032105] Speculative Store Bypass: Vulnerable
[    0.032305] Freeing SMP alternatives memory: 24K
[    0.036000] smpboot: CPU0: Intel(R) Pentium(R) 4 CPU 3.40GHz (family: 0xf, model: 0x3, stepping: 0x4)
[    0.036000] Performance Events: Netburst events, Netburst P4/Xeon PMU driver.
[    0.036000] ... version:                0
[    0.036000] ... bit width:              40
[    0.036000] ... generic registers:      18
[    0.036000] ... value mask:             000000ffffffffff
[    0.036000] ... max period:             0000007fffffffff
[    0.036000] ... fixed-purpose events:   0
[    0.036000] ... event mask:             000000000003ffff
[    0.036000] Hierarchical SRCU implementation.
[    0.036000] NMI watchdog: Enabled. Permanently consumes one hw-PMU counter.
[    0.036000] smp: Bringing up secondary CPUs ...
[    0.036000] CPU 1 irqstacks, hard=(ptrval) soft=(ptrval)
[    0.036000] x86: Booting SMP configuration:
[    0.036000] .... node  #0, CPUs:      #1
[    0.004000] Initializing CPU#1
[    0.047116] smp: Brought up 1 node, 2 CPUs
[    0.047116] smpboot: Max logical packages: 1
[    0.047116] smpboot: Total of 2 processors activated (13601.54 BogoMIPS)
[    0.048219] devtmpfs: initialized
[    0.048455] PM: Registering ACPI NVS region [mem 0x3ff7a000-0x3ff7ffff] (24576 bytes)
[    0.048714] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.048879] futex hash table entries: 512 (order: 4, 65536 bytes)
[    0.049180] NET: Registered protocol family 16
[    0.049456] audit: initializing netlink subsys (disabled)
[    0.049575] audit: type=2000 audit(1532870745.048:1): state=initialized audit_enabled=0 res=1
[    0.049575] cpuidle: using governor ladder
[    0.049575] cpuidle: using governor menu
[    0.049575] Simple Boot Flag at 0x38 set to 0x80
[    0.049575] ACPI: bus type PCI registered
[    0.052312] PCI: PCI BIOS revision 2.10 entry at 0xfd920, last bus=4
[    0.052408] PCI: Using configuration type 1 for base access
[    0.054046] HugeTLB registered 4.00 MiB page size, pre-allocated 0 pages
[    0.054046] ACPI: Added _OSI(Module Device)
[    0.054046] ACPI: Added _OSI(Processor Device)
[    0.054046] ACPI: Added _OSI(3.0 _SCP Extensions)
[    0.054046] ACPI: Added _OSI(Processor Aggregator Device)
[    0.054046] ACPI: Added _OSI(Linux-Dell-Video)
[    0.057924] ACPI: 2 ACPI AML tables successfully acquired and loaded
[    0.059827] ACPI: Interpreter enabled
[    0.059967] ACPI: (supports S0 S1 S4 S5)
[    0.060006] ACPI: Using IOAPIC for interrupt routing
[    0.060156] PCI: Ignoring host bridge windows from ACPI; if necessary, use "pci=use_crs" and report a bug
[    0.060526] ACPI: Enabled 7 GPEs in block 00 to 1F
[    0.066378] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])
[    0.066486] acpi PNP0A03:00: _OSC: OS supports [Segments MSI]
[    0.066592] acpi PNP0A03:00: _OSC failed (AE_NOT_FOUND); disabling ASPM
[    0.066696] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.
[    0.068021] acpi PNP0A03:00: host bridge window [io  0x0cf8-0x0cff] (ignored)
[    0.068024] acpi PNP0A03:00: host bridge window [io  0x0000-0x0cf7 window] (ignored)
[    0.068027] acpi PNP0A03:00: host bridge window [mem 0x000a0000-0x000bffff window] (ignored)
[    0.068030] acpi PNP0A03:00: host bridge window [mem 0x000cc000-0x000cffff window] (ignored)
[    0.068032] acpi PNP0A03:00: host bridge window [mem 0x000d0000-0x000d3fff window] (ignored)
[    0.068035] acpi PNP0A03:00: host bridge window [mem 0x000d4000-0x000d7fff window] (ignored)
[    0.068037] acpi PNP0A03:00: host bridge window [mem 0x000d8000-0x000dbfff window] (ignored)
[    0.068040] acpi PNP0A03:00: host bridge window [mem 0x3ff80000-0xfebfffff window] (ignored)
[    0.068042] acpi PNP0A03:00: host bridge window [io  0x0d00-0xffff window] (ignored)
[    0.068045] acpi PNP0A03:00: host bridge window [mem 0xfed20000-0xfed8ffff window] (ignored)
[    0.068047] PCI: root bus 00: using default resources
[    0.068172] PCI host bridge to bus 0000:00
[    0.068271] pci_bus 0000:00: root bus resource [io  0x0000-0xffff]
[    0.068371] pci_bus 0000:00: root bus resource [mem 0x00000000-0xffffffff]
[    0.068474] pci_bus 0000:00: root bus resource [bus 00-ff]
[    0.068586] pci 0000:00:00.0: [8086:2578] type 00 class 0x060000
[    0.068602] pci 0000:00:00.0: reg 0x10: [mem 0xfc000000-0xfdffffff pref]
[    0.068752] pci 0000:00:03.0: [8086:257b] type 01 class 0x060400
[    0.068915] pci 0000:00:06.0: [8086:257e] type 00 class 0x088000
[    0.068930] pci 0000:00:06.0: reg 0x10: [mem 0xfecf0000-0xfecf0fff]
[    0.069097] pci 0000:00:1c.0: [8086:25ae] type 01 class 0x060400
[    0.069271] pci 0000:00:1d.0: [8086:25a9] type 00 class 0x0c0300
[    0.069322] pci 0000:00:1d.0: reg 0x20: [io  0x1400-0x141f]
[    0.069463] pci 0000:00:1d.1: [8086:25aa] type 00 class 0x0c0300
[    0.069514] pci 0000:00:1d.1: reg 0x20: [io  0x1420-0x143f]
[    0.069657] pci 0000:00:1d.4: [8086:25ab] type 00 class 0x088000
[    0.069676] pci 0000:00:1d.4: reg 0x10: [mem 0xf8000000-0xf800000f]
[    0.069829] pci 0000:00:1d.5: [8086:25ac] type 00 class 0x080020
[    0.070017] pci 0000:00:1d.7: [8086:25ad] type 00 class 0x0c0320
[    0.070044] pci 0000:00:1d.7: reg 0x10: [mem 0xf8000400-0xf80007ff]
[    0.070142] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold
[    0.070266] pci 0000:00:1e.0: [8086:244e] type 01 class 0x060400
[    0.070424] pci 0000:00:1f.0: [8086:25a1] type 00 class 0x060100
[    0.070501] pci 0000:00:1f.0: quirk: [io  0x1000-0x107f] claimed by ICH4 ACPI/GPIO/TCO
[    0.070659] pci 0000:00:1f.0: quirk: [io  0x1180-0x11bf] claimed by ICH4 GPIO
[    0.070866] pci 0000:00:1f.1: [8086:25a2] type 00 class 0x01018a
[    0.070885] pci 0000:00:1f.1: reg 0x10: [io  0x0000-0x0007]
[    0.070895] pci 0000:00:1f.1: reg 0x14: [io  0x0000-0x0003]
[    0.070905] pci 0000:00:1f.1: reg 0x18: [io  0x0000-0x0007]
[    0.070915] pci 0000:00:1f.1: reg 0x1c: [io  0x0000-0x0003]
[    0.070926] pci 0000:00:1f.1: reg 0x20: [io  0x1460-0x146f]
[    0.070936] pci 0000:00:1f.1: reg 0x24: [mem 0x00000000-0x000003ff]
[    0.070950] pci 0000:00:1f.1: legacy IDE quirk: reg 0x10: [io  0x01f0-0x01f7]
[    0.071052] pci 0000:00:1f.1: legacy IDE quirk: reg 0x14: [io  0x03f6]
[    0.071152] pci 0000:00:1f.1: legacy IDE quirk: reg 0x18: [io  0x0170-0x0177]
[    0.071252] pci 0000:00:1f.1: legacy IDE quirk: reg 0x1c: [io  0x0376]
[    0.071465] pci 0000:00:1f.3: [8086:25a4] type 00 class 0x0c0500
[    0.071515] pci 0000:00:1f.3: reg 0x20: [io  0x1440-0x145f]
[    0.071642] pci_bus 0000:02: extended config space not accessible
[    0.071791] pci 0000:02:01.0: [8086:1075] type 00 class 0x020000
[    0.071807] pci 0000:02:01.0: reg 0x10: [mem 0xf8120000-0xf813ffff]
[    0.071816] pci 0000:02:01.0: reg 0x14: [mem 0xf8100000-0xf811ffff]
[    0.071825] pci 0000:02:01.0: reg 0x18: [io  0x2000-0x201f]
[    0.071852] pci 0000:02:01.0: reg 0x30: [mem 0x00000000-0x0001ffff pref]
[    0.071882] pci 0000:02:01.0: PME# supported from D0 D3hot D3cold
[    0.071991] pci 0000:00:03.0: PCI bridge to [bus 02]
[    0.072009] pci 0000:00:03.0:   bridge window [io  0x2000-0x2fff]
[    0.072013] pci 0000:00:03.0:   bridge window [mem 0xf8100000-0xf81fffff]
[    0.072040] pci_bus 0000:03: extended config space not accessible
[    0.072180] pci 0000:03:01.0: [13c1:1001] type 00 class 0x010400
[    0.072200] pci 0000:03:01.0: reg 0x10: [io  0x30e0-0x30ef]
[    0.072211] pci 0000:03:01.0: reg 0x14: [mem 0xf8261000-0xf826100f]
[    0.072222] pci 0000:03:01.0: reg 0x18: [mem 0xf8800000-0xf8ffffff]
[    0.072257] pci 0000:03:01.0: reg 0x30: [mem 0x00000000-0x0000ffff pref]
[    0.072293] pci 0000:03:01.0: supports D1
[    0.072363] pci 0000:03:02.0: [8086:1008] type 00 class 0x020000
[    0.072384] pci 0000:03:02.0: reg 0x10: [mem 0xf8220000-0xf823ffff]
[    0.072395] pci 0000:03:02.0: reg 0x14: [mem 0xf8200000-0xf821ffff]
[    0.072406] pci 0000:03:02.0: reg 0x18: [io  0x30c0-0x30df]
[    0.072442] pci 0000:03:02.0: reg 0x30: [mem 0x00000000-0x0001ffff pref]
[    0.072493] pci 0000:03:02.0: PME# supported from D0 D3hot D3cold
[    0.072575] pci 0000:03:04.0: [105a:3319] type 00 class 0x010400
[    0.072594] pci 0000:03:04.0: reg 0x10: [io  0x3080-0x30bf]
[    0.072605] pci 0000:03:04.0: reg 0x14: [io  0x30f0-0x30ff]
[    0.072616] pci 0000:03:04.0: reg 0x18: [io  0x3000-0x307f]
[    0.072627] pci 0000:03:04.0: reg 0x1c: [mem 0xf8260000-0xf8260fff]
[    0.072638] pci 0000:03:04.0: reg 0x20: [mem 0xf8240000-0xf825ffff]
[    0.072691] pci 0000:03:04.0: supports D1
[    0.072783] pci 0000:00:1c.0: PCI bridge to [bus 03]
[    0.072890] pci 0000:00:1c.0:   bridge window [io  0x3000-0x3fff]
[    0.072895] pci 0000:00:1c.0:   bridge window [mem 0xf8200000-0xf8ffffff]
[    0.072914] pci_bus 0000:04: extended config space not accessible
[    0.073058] pci 0000:04:05.0: [1002:4752] type 00 class 0x030000
[    0.073077] pci 0000:04:05.0: reg 0x10: [mem 0xf9000000-0xf9ffffff]
[    0.073087] pci 0000:04:05.0: reg 0x14: [io  0x4000-0x40ff]
[    0.073098] pci 0000:04:05.0: reg 0x18: [mem 0xfa040000-0xfa040fff]
[    0.073132] pci 0000:04:05.0: reg 0x30: [mem 0x00000000-0x0001ffff pref]
[    0.073168] pci 0000:04:05.0: supports D1 D2
[    0.073235] pci 0000:04:06.0: [8086:1076] type 00 class 0x020000
[    0.073255] pci 0000:04:06.0: reg 0x10: [mem 0xfa020000-0xfa03ffff]
[    0.073265] pci 0000:04:06.0: reg 0x14: [mem 0xfa000000-0xfa01ffff]
[    0.073275] pci 0000:04:06.0: reg 0x18: [io  0x4400-0x443f]
[    0.073306] pci 0000:04:06.0: reg 0x30: [mem 0x00000000-0x0001ffff pref]
[    0.073347] pci 0000:04:06.0: PME# supported from D0 D3hot D3cold
[    0.073442] pci 0000:00:1e.0: PCI bridge to [bus 04] (subtractive decode)
[    0.073546] pci 0000:00:1e.0:   bridge window [io  0x4000-0x4fff]
[    0.073551] pci 0000:00:1e.0:   bridge window [mem 0xf9000000-0xfa0fffff]
[    0.073556] pci 0000:00:1e.0:   bridge window [io  0x0000-0xffff] (subtractive decode)
[    0.073559] pci 0000:00:1e.0:   bridge window [mem 0x00000000-0xffffffff] (subtractive decode)
[    0.073577] pci_bus 0000:00: on NUMA node 0
[    0.073906] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 10 11 14 15) *5
[    0.074130] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 *10 11 14 15)
[    0.074351] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 10 11 14 15) *7
[    0.074573] ACPI: PCI Interrupt Link [LNKD] (IRQs *3 10 11 14 15)
[    0.074800] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 10 11 14 15) *0, disabled.
[    0.075089] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 10 11 14 15) *0, disabled.
[    0.075373] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 10 11 14 15) *0, disabled.
[    0.075656] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 10 *11 14 15)
[    0.076400] pci 0000:04:05.0: vgaarb: setting as boot VGA device
[    0.076400] pci 0000:04:05.0: vgaarb: VGA device added: decodes=io+mem,owns=io+mem,locks=none
[    0.076400] pci 0000:04:05.0: vgaarb: bridge control possible
[    0.076400] vgaarb: loaded
[    0.076615] SCSI subsystem initialized
[    0.076767] PCI: Using ACPI for IRQ routing
[    0.076897] PCI: pci_cache_line_size set to 64 bytes
[    0.076954] e820: reserve RAM buffer [mem 0x0009b000-0x0009ffff]
[    0.076957] e820: reserve RAM buffer [mem 0x3ff70000-0x3fffffff]
[    0.080100] clocksource: Switched to clocksource tsc-early
[    0.080453] AppArmor: AppArmor Filesystem Enabled
[    0.080572] pnp: PnP ACPI init
[    0.080989] system 00:00: [io  0x1000-0x107f] has been reserved
[    0.081094] system 00:00: [io  0x1180-0x11bf] has been reserved
[    0.081194] system 00:00: [io  0x012e-0x012f] has been reserved
[    0.081294] system 00:00: [io  0x0372-0x0375] has been reserved
[    0.081394] system 00:00: [io  0x0377] has been reserved
[    0.081493] system 00:00: [io  0x04d0-0x04d1] has been reserved
[    0.081593] system 00:00: [io  0x0600-0x067f] has been reserved
[    0.081692] system 00:00: [io  0x0ca2-0x0ca5] could not be reserved
[    0.081792] system 00:00: [io  0xfe00] has been reserved
[    0.081890] system 00:00: [io  0xfe10-0xfe11] has been reserved
[    0.081992] system 00:00: [mem 0xfecf0000-0xfecfffff] could not be reserved
[    0.082092] system 00:00: [mem 0xfed20000-0xfed8ffff] has been reserved
[    0.082203] system 00:00: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.082299] pnp 00:01: Plug and Play ACPI device, IDs PNP0b00 (active)
[    0.082421] pnp 00:02: Plug and Play ACPI device, IDs PNP0303 (active)
[    0.082478] pnp 00:03: Plug and Play ACPI device, IDs PNP0f13 (active)
[    0.082920] pnp 00:04: [dma 2]
[    0.082972] pnp 00:04: Plug and Play ACPI device, IDs PNP0700 (active)
[    0.083083] pnp: PnP ACPI: found 5 devices
[    0.120908] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns
[    0.121108] pci 0000:00:03.0: BAR 9: assigned [mem 0x40000000-0x400fffff pref]
[    0.121264] pci 0000:00:1e.0: BAR 9: assigned [mem 0x40100000-0x401fffff pref]
[    0.121418] pci 0000:00:1f.1: BAR 5: assigned [mem 0x40200000-0x402003ff]
[    0.121527] pci 0000:02:01.0: BAR 6: assigned [mem 0x40000000-0x4001ffff pref]
[    0.121683] pci 0000:00:03.0: PCI bridge to [bus 02]
[    0.121784] pci 0000:00:03.0:   bridge window [io  0x2000-0x2fff]
[    0.121886] pci 0000:00:03.0:   bridge window [mem 0xf8100000-0xf81fffff]
[    0.121986] pci 0000:00:03.0:   bridge window [mem 0x40000000-0x400fffff pref]
[    0.122139] pci 0000:03:02.0: BAR 6: assigned [mem 0xf8280000-0xf829ffff pref]
[    0.122286] pci 0000:03:01.0: BAR 6: assigned [mem 0xf8270000-0xf827ffff pref]
[    0.122436] pci 0000:00:1c.0: PCI bridge to [bus 03]
[    0.122533] pci 0000:00:1c.0:   bridge window [io  0x3000-0x3fff]
[    0.122631] pci 0000:00:1c.0:   bridge window [mem 0xf8200000-0xf8ffffff]
[    0.122737] pci 0000:04:05.0: BAR 6: assigned [mem 0x40100000-0x4011ffff pref]
[    0.122884] pci 0000:04:06.0: BAR 6: assigned [mem 0x40120000-0x4013ffff pref]
[    0.123031] pci 0000:00:1e.0: PCI bridge to [bus 04]
[    0.123126] pci 0000:00:1e.0:   bridge window [io  0x4000-0x4fff]
[    0.123232] pci 0000:00:1e.0:   bridge window [mem 0xf9000000-0xfa0fffff]
[    0.123332] pci 0000:00:1e.0:   bridge window [mem 0x40100000-0x401fffff pref]
[    0.123485] pci_bus 0000:00: resource 4 [io  0x0000-0xffff]
[    0.123488] pci_bus 0000:00: resource 5 [mem 0x00000000-0xffffffff]
[    0.123491] pci_bus 0000:02: resource 0 [io  0x2000-0x2fff]
[    0.123494] pci_bus 0000:02: resource 1 [mem 0xf8100000-0xf81fffff]
[    0.123496] pci_bus 0000:02: resource 2 [mem 0x40000000-0x400fffff pref]
[    0.123499] pci_bus 0000:03: resource 0 [io  0x3000-0x3fff]
[    0.123502] pci_bus 0000:03: resource 1 [mem 0xf8200000-0xf8ffffff]
[    0.123505] pci_bus 0000:04: resource 0 [io  0x4000-0x4fff]
[    0.123507] pci_bus 0000:04: resource 1 [mem 0xf9000000-0xfa0fffff]
[    0.123510] pci_bus 0000:04: resource 2 [mem 0x40100000-0x401fffff pref]
[    0.123512] pci_bus 0000:04: resource 4 [io  0x0000-0xffff]
[    0.123515] pci_bus 0000:04: resource 5 [mem 0x00000000-0xffffffff]
[    0.123655] NET: Registered protocol family 2
[    0.124027] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes)
[    0.124193] TCP established hash table entries: 8192 (order: 3, 32768 bytes)
[    0.124314] TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
[    0.124450] TCP: Hash tables configured (established 8192 bind 8192)
[    0.124592] UDP hash table entries: 512 (order: 2, 16384 bytes)
[    0.124702] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
[    0.124878] NET: Registered protocol family 1
[    0.125474] pci 0000:00:1d.5: disabled boot interrupts on device [8086:25ac]
[    0.125909] PCI: CLS mismatch (64 != 32), using 64 bytes
[    0.125927] pci 0000:04:05.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff]
[    0.127113] workingset: timestamp_bits=14 max_order=18 bucket_order=4
[    0.127378] pstore: using deflate compression
[    0.129020] bounce: pool size: 64 pages
[    0.129121] io scheduler noop registered
[    0.129215] io scheduler deadline registered
[    0.129335] io scheduler cfq registered (default)
[    0.130413] tsc: Marking TSC unstable due to TSC halts in idle
[    0.130567] clocksource: Switched to clocksource acpi_pm
[    0.131968] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[    0.132637] Linux agpgart interface v0.103
[    0.132843] agpgart-intel 0000:00:00.0: Intel i875 Chipset
[    0.134733] agpgart-intel 0000:00:00.0: AGP aperture is 32M @ 0xfc000000
[    0.135064] 3ware Storage Controller device driver for Linux v1.26.02.003.
[    0.135930] Floppy drive(s): fd0 is 1.44M
[    0.159827] FDC 0 is a post-1991 82077
[    6.076028] 3w-xxxx: AEN: ERROR: Unit degraded: Unit #1.
[    6.556030] scsi host0: 3ware Storage Controller
[    6.556216] 3w-xxxx: scsi0: Found a 3ware Storage Controller at 0x30e0, IRQ: 24.
[    6.556577] i8042: PNP: PS/2 Controller [PNP0303:KBC0,PNP0f13:MSE0] at 0x60,0x64 irq 1,12
[    6.557116] scsi 0:0:1:0: Direct-Access     3ware    Logical Disk 1   1.2  PQ: 0 ANSI: 0
[    6.559996] serio: i8042 KBD port at 0x60,0x64 irq 1
[    6.560129] serio: i8042 AUX port at 0x60,0x64 irq 12
[    6.560475] rtc_cmos 00:01: RTC can wake from S4
[    6.560777] rtc_cmos 00:01: registered as rtc0
[    6.560913] rtc_cmos 00:01: alarms up to one month, y3k, 114 bytes nvram
[    6.561226] NET: Registered protocol family 10
[    6.561787] Segment Routing with IPv6
[    6.561927] mip6: Mobile IPv6
[    6.562277] sd 0:0:1:0: [sda] 312579760 512-byte logical blocks: (160 GB/149 GiB)
[    6.563309] NET: Registered protocol family 17
[    6.563653] sd 0:0:1:0: [sda] Write Protect is off
[    6.563759] microcode: sig=0xf34, pf=0x4, revision=0x13
[    6.563761] sd 0:0:1:0: [sda] Mode Sense: 00 00 00 00
[    6.563979] microcode: Microcode Update Driver: v2.2.
[    6.563986] Using IPI No-Shortcut mode
[    6.564141] sd 0:0:1:0: [sda] Write cache: enabled, read cache: disabled, supports DPO and FUA
[    6.564636] registered taskstats version 1
[    6.564746] AppArmor: AppArmor sha1 policy hashing enabled
[    6.565113] console [netcon0] enabled
[    6.565220] netconsole: network logging started
[    6.565372] rtc_cmos 00:01: setting system clock to 2018-07-29 13:25:52 UTC (1532870752)
[    6.582852] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0
[    6.595461]  sda: sda1 sda2 < sda5 >
[    6.596717] sd 0:0:1:0: [sda] Attached SCSI disk
[    6.973272] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
[    6.973446] VFS: Mounted root (ext4 filesystem) readonly on device 8:1.
[    7.004973] devtmpfs: mounted
[    7.005422] Freeing unused kernel memory: 564K
[    7.020051] Write protecting the kernel text: 8196k
[    7.020180] Write protecting the kernel read-only data: 1220k
[    7.081825] ================================================================================
[    7.081984] UBSAN: Undefined behaviour in fs/ext4/readpage.c:129:13
[    7.082080] member access within null pointer of type 'struct page'
[    7.082180] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.18.0-rc6-00218-ga26fb01c2879-dirty #80
[    7.082331] Hardware name: FUJITSU SIEMENS PRIMERGY RX100S2/D1571/M71IXG, BIOS 6.0 Rev. C0F2.1571 04/27/2005
[    7.082486] Call Trace:
[    7.082589]  dump_stack+0x55/0x83
[    7.082689]  ubsan_epilogue+0xb/0x33
[    7.082788]  handle_null_ptr_deref+0x77/0x7e
[    7.082889]  __ubsan_handle_type_mismatch_v1+0x54/0x5f
[    7.082988]  ? _raw_read_trylock+0x51/0x52
[    7.083086]  ext4_mpage_readpages+0xd86/0xe1c
[    7.083185]  ? __ext4_ext_check+0x155/0x62f
[    7.083285]  ? woken_wake_function+0x3d/0x3d
[    7.083381]  ? __ext4_get_inode_loc+0x412/0x593
[    7.083475]  ext4_readpages+0x45/0x81
[    7.083570]  ? ext4_bmap+0x217/0x217
[    7.083667]  read_pages+0x5a/0x21b
[    7.083765]  __do_page_cache_readahead+0x1aa/0x22e
[    7.083861]  ? __radix_tree_lookup+0x36/0xd3
[    7.083958]  ondemand_readahead+0x168/0x2c6
[    7.084056]  page_cache_sync_readahead+0x44/0x71
[    7.084155]  generic_file_read_iter+0x5f1/0x11ca
[    7.084254]  ext4_file_read_iter+0x65/0xe2
[    7.084351]  __vfs_read+0x15f/0x241
[    7.084446]  vfs_read+0x89/0x1ed
[    7.084541]  kernel_read+0x5a/0xea
[    7.084636]  prepare_binprm+0x1ee/0x388
[    7.084731]  __do_execve_file+0x5b4/0xd9e
[    7.084826]  ? rest_init+0x39/0xa1
[    7.084921]  do_execve+0x27/0x29
[    7.085017]  run_init_process+0x1c/0x1e
[    7.085111]  try_to_run_init_process+0xc/0x2e
[    7.085206]  ? rest_init+0x39/0xa1
[    7.085301]  kernel_init+0xae/0xed
[    7.085397]  ? rest_init+0xa1/0xa1
[    7.085493]  ret_from_fork+0x2e/0x38
[    7.085587] ================================================================================
[    7.343073] random: fast init done
[    8.759370] systemd[1]: systemd 239 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid)
[    8.759874] systemd[1]: Detected architecture x86.
[    8.807126] systemd[1]: Set hostname to <rx100s2>.
[    8.822317] ================================================================================
[    8.822470] UBSAN: Undefined behaviour in net/ipv4/fib_trie.c:504:6
[    8.822566] member access within null pointer of type 'struct tnode'
[    8.822665] CPU: 1 PID: 1 Comm: systemd Not tainted 4.18.0-rc6-00218-ga26fb01c2879-dirty #80
[    8.822815] Hardware name: FUJITSU SIEMENS PRIMERGY RX100S2/D1571/M71IXG, BIOS 6.0 Rev. C0F2.1571 04/27/2005
[    8.822966] Call Trace:
[    8.823068]  dump_stack+0x55/0x83
[    8.823167]  ubsan_epilogue+0xb/0x33
[    8.823263]  handle_null_ptr_deref+0x77/0x7e
[    8.823359]  __ubsan_handle_type_mismatch_v1+0x54/0x5f
[    8.823457]  tnode_free+0xb4/0xf7
[    8.823551]  replace+0x8a/0x19f
[    8.823644]  resize+0x453/0x979
[    8.823739]  fib_insert_alias+0x398/0x6ea
[    8.823833]  fib_table_insert+0x1dc/0x57d
[    8.823931]  fib_magic+0x122/0x17e
[    8.824033]  fib_add_ifaddr+0x179/0x1b1
[    8.824137]  fib_netdev_event+0x6c/0x1bc
[    8.824233]  ? fib_add_ifaddr+0x1b1/0x1b1
[    8.824329]  notifier_call_chain+0x5d/0xa2
[    8.824426]  ? fib_add_ifaddr+0x1b1/0x1b1
[    8.824521]  raw_notifier_call_chain+0x28/0x43
[    8.824618]  call_netdevice_notifiers_info+0x23/0x66
[    8.824714]  ? __dev_change_flags+0x184/0x26a
[    8.824810]  __dev_notify_flags+0x51/0xe1
[    8.824905]  dev_change_flags+0x52/0x6a
[    8.825001]  do_setlink+0x340/0x105a
[    8.825096]  ? add_timer+0x13a/0x394
[    8.825191]  ? nla_parse+0x37/0x166
[    8.825286]  ? set_next_entity+0x11c/0x98f
[    8.825382]  rtnl_setlink+0x10f/0x1cf
[    8.825479]  ? _cond_resched+0x12/0x22
[    8.825573]  ? mutex_lock+0x1a/0x6d
[    8.825669]  ? do_setlink+0x105a/0x105a
[    8.825764]  rtnetlink_rcv_msg+0x2b5/0x50c
[    8.825860]  ? rtnl_calcit+0x20b/0x20b
[    8.825956]  netlink_rcv_skb+0x77/0x10b
[    8.825998]  rtnetlink_rcv+0xd/0xf
[    8.825998]  netlink_unicast+0x192/0x28c
[    8.825998]  netlink_sendmsg+0x2bf/0x56a
[    8.825998]  ? netlink_broadcast_filtered+0x500/0x500
[    8.825998]  sock_sendmsg+0x42/0x8d
[    8.825998]  __sys_sendto+0xe9/0x15b
[    8.825998]  ? handle_mm_fault+0xd13/0x14ad
[    8.825998]  ? netlink_getsockopt+0x1ef/0x2db
[    8.825998]  ? _copy_from_user+0x37/0x6c
[    8.825998]  sys_socketcall+0x1e2/0x322
[    8.825998]  do_fast_syscall_32+0xc7/0x3b3
[    8.825998]  entry_SYSENTER_32+0x4e/0x7c
[    8.825998] EIP: 0xb7f84b1d
[    8.825998] Code: 00 05 58 f8 ff ff 8b 55 08 8b 80 5c cd ff ff 85 d2 74 02 89 02 5d c3 8b 04 24 c3 8b 1c 24 c3 90 90 51 52 55 89 e5 0f 34 cd 80 <5d> 5a 59 c3 90 90 90 90 8d 76 00 58 b8 77 00 00 00 cd 80 90 8d 76 
[    8.825998] EAX: ffffffda EBX: 0000000b ECX: bffad3c4 EDX: 00000000
[    8.825998] ESI: 00000000 EDI: 0225fae0 EBP: 0225f600 ESP: bffad3b0
[    8.825998] DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 007b EFLAGS: 00000286
[    8.825998] ================================================================================
[    9.913452] random: crng init done
[   10.095365] systemd[1]: Listening on udev Control Socket.
[   10.096316] systemd[1]: Listening on Journal Socket.
[   10.097033] systemd[1]: Listening on Journal Audit Socket.
[   10.100449] systemd[1]: Starting Wait for network to be configured by ifupdown...
[   10.101745] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.
[   10.137595] systemd[1]: Starting Load Kernel Modules...
[   10.138503] systemd[1]: Listening on udev Kernel Socket.
[   11.182762] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro
[   11.335976] systemd-journald[84]: Received request to flush runtime journal from PID 1
[   12.509386] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0C0C:00/input/input2
[   12.509570] ACPI: Power Button [PWRB]
[   12.509794] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3
[   12.510390] ACPI: Power Button [PWRF]
[   12.531423] ACPI: bus type USB registered
[   12.531602] usbcore: registered new interface driver usbfs
[   12.531737] usbcore: registered new interface driver hub
[   12.533926] usbcore: registered new device driver usb
[   12.537543] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[   12.546162] ehci-pci: EHCI PCI platform driver
[   12.546545] ehci-pci 0000:00:1d.7: EHCI Host Controller
[   12.546659] ehci-pci 0000:00:1d.7: new USB bus registered, assigned bus number 1
[   12.546832] ehci-pci 0000:00:1d.7: debug port 1
[   12.550850] ehci-pci 0000:00:1d.7: cache line size of 64 is not supported
[   12.552726] ehci-pci 0000:00:1d.7: irq 23, io mem 0xf8000400
[   12.568064] ehci-pci 0000:00:1d.7: USB 2.0 started, EHCI 1.00
[   12.568303] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 4.18
[   12.568463] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   12.568622] usb usb1: Product: EHCI Host Controller
[   12.568727] usb usb1: Manufacturer: Linux 4.18.0-rc6-00218-ga26fb01c2879-dirty ehci_hcd
[   12.568885] usb usb1: SerialNumber: 0000:00:1d.7
[   12.569299] hub 1-0:1.0: USB hub found
[   12.569425] hub 1-0:1.0: 4 ports detected
[   12.595998] uhci_hcd: USB Universal Host Controller Interface driver
[   12.596402] uhci_hcd 0000:00:1d.0: UHCI Host Controller
[   12.596517] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2
[   12.596729] uhci_hcd 0000:00:1d.0: irq 16, io base 0x00001400
[   12.596993] usb usb2: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 4.18
[   12.597156] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   12.597314] usb usb2: Product: UHCI Host Controller
[   12.597414] usb usb2: Manufacturer: Linux 4.18.0-rc6-00218-ga26fb01c2879-dirty uhci_hcd
[   12.597570] usb usb2: SerialNumber: 0000:00:1d.0
[   12.597962] hub 2-0:1.0: USB hub found
[   12.598080] hub 2-0:1.0: 2 ports detected
[   12.598681] uhci_hcd 0000:00:1d.1: UHCI Host Controller
[   12.598792] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 3
[   12.598994] uhci_hcd 0000:00:1d.1: irq 19, io base 0x00001420
[   12.599209] usb usb3: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 4.18
[   12.599368] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   12.599528] usb usb3: Product: UHCI Host Controller
[   12.599635] usb usb3: Manufacturer: Linux 4.18.0-rc6-00218-ga26fb01c2879-dirty uhci_hcd
[   12.599796] usb usb3: SerialNumber: 0000:00:1d.1
[   12.608212] hub 3-0:1.0: USB hub found
[   12.608339] hub 3-0:1.0: 2 ports detected
[   12.616146] i6300ESB timer 0000:00:1d.4: initialized (0xe3a06cc7). heartbeat=30 sec (nowayout=0)
[   12.640770] ipmi message handler version 39.2
[   12.642016] i801_smbus 0000:00:1f.3: SMBus using PCI interrupt
[   12.642937] ipmi device interface
[   12.656172] IPMI System Interface driver.
[   12.656302] ipmi_si dmi-ipmi-si.0: ipmi_platform: probing via SMBIOS
[   12.656409] ipmi_si: SMBIOS: io 0xca2 regsize 1 spacing 1 irq 0
[   12.656510] ipmi_si: Adding SMBIOS-specified kcs state machine
[   12.657139] ipmi_si: Trying SMBIOS-specified kcs state machine at i/o address 0xca2, slave address 0x24, irq 0
[   12.736477] sd 0:0:1:0: Attached scsi generic sg0 type 0
[   12.799519] input: PC Speaker as /devices/platform/pcspkr/input/input4
[   12.834094] intel_rng: FWH not detected
[   12.836606] libata version 3.00 loaded.
[   12.950797] e1000: Intel(R) PRO/1000 Network Driver - version 7.3.21-k8-NAPI
[   12.950908] e1000: Copyright (c) 1999-2006 Intel Corporation.
[   12.996478] ata_piix 0000:00:1f.1: version 2.13
[   13.016247] scsi host1: ata_piix
[   13.029646] ipmi_si dmi-ipmi-si.0: Found new BMC (man_id: 0x002880, prod_id: 0x0000, dev_id: 0x00)
[   13.061553] scsi host2: ata_piix
[   13.061794] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0x1460 irq 14
[   13.061898] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x1468 irq 15
[   13.063044] ata2: port disabled--ignoring
[   13.130761] ipmi_si dmi-ipmi-si.0: IPMI kcs interface initialized
[   13.222624] ata1.00: ATAPI: HL-DT-STDVD-ROM GDR8082N, 0002, max UDMA/33
[   13.242281] e1000 0000:02:01.0 eth0: (PCI:33MHz:32-bit) 00:0a:e4:13:60:82
[   13.242397] e1000 0000:02:01.0 eth0: Intel(R) PRO/1000 Network Connection
[   13.251727] scsi 1:0:0:0: CD-ROM            HL-DT-ST DVD-ROM GDR8082N 0002 PQ: 0 ANSI: 5
[   13.365584] scsi 1:0:0:0: Attached scsi generic sg1 type 5
[   13.440933] iTCO_vendor_support: vendor-support=0
[   13.546137] e1000 0000:03:02.0 eth1: (PCI:66MHz:64-bit) 00:02:b3:b9:10:b5
[   13.546253] e1000 0000:03:02.0 eth1: Intel(R) PRO/1000 Network Connection
[   13.832862] iTCO_wdt: Intel TCO WatchDog Timer Driver v1.11
[   13.833014] iTCO_wdt: Found a 6300ESB TCO device (Version=1, TCOBASE=0x1060)
[   13.833916] iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0)
[   13.921486] sr 1:0:0:0: [sr0] scsi3-mmc drive: 10x/24x cd/rw xa/form2 cdda tray
[   13.921663] cdrom: Uniform CD-ROM driver Revision: 3.20
[   13.922102] sr 1:0:0:0: Attached scsi CD-ROM sr0
[   13.950344] Adding 2093052k swap on /dev/sda5.  Priority:-2 extents:1 across:2093052k 
[   14.001568] audit: type=1400 audit(1532870759.931:2): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/sbin/tcpdump" pid=157 comm="apparmor_parser"
[   14.058347] e1000 0000:04:06.0 eth2: (PCI:33MHz:32-bit) 00:0a:e4:13:60:83
[   14.058463] e1000 0000:04:06.0 eth2: Intel(R) PRO/1000 Network Connection
[   14.076980] audit: type=1400 audit(1532870760.007:3): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/man" pid=167 comm="apparmor_parser"
[   14.077232] audit: type=1400 audit(1532870760.007:4): apparmor="STATUS" operation="profile_load" profile="unconfined" name="man_filter" pid=167 comm="apparmor_parser"
[   14.077465] audit: type=1400 audit(1532870760.007:5): apparmor="STATUS" operation="profile_load" profile="unconfined" name="man_groff" pid=167 comm="apparmor_parser"
[   14.160334] e1000 0000:03:02.0 enp3s2: renamed from eth1
[   14.161568] audit: type=1400 audit(1532870760.091:6): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/sbin/ntpd" pid=156 comm="apparmor_parser"
[   14.177598] e1000 0000:02:01.0 enp2s1: renamed from eth0
[   14.202912] e1000 0000:04:06.0 enp4s6: renamed from eth2
[   17.373443] IPv6: ADDRCONF(NETDEV_UP): enp2s1: link is not ready
[   17.380463] e1000: enp2s1 NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX
[   17.380679] IPv6: ADDRCONF(NETDEV_CHANGE): enp2s1: link becomes ready
[   24.375427] ================================================================================
[   24.375590] UBSAN: Undefined behaviour in ./include/net/route.h:239:2
[   24.375687] member access within null pointer of type 'struct rtable'
[   24.375786] CPU: 1 PID: 378 Comm: ntpdate Not tainted 4.18.0-rc6-00218-ga26fb01c2879-dirty #80
[   24.375937] Hardware name: FUJITSU SIEMENS PRIMERGY RX100S2/D1571/M71IXG, BIOS 6.0 Rev. C0F2.1571 04/27/2005
[   24.376089] Call Trace:
[   24.376191]  dump_stack+0x55/0x83
[   24.376289]  ubsan_epilogue+0xb/0x33
[   24.376385]  handle_null_ptr_deref+0x77/0x7e
[   24.376480]  __ubsan_handle_type_mismatch_v1+0x54/0x5f
[   24.376579]  udp_sendmsg+0xb3e/0xf1a
[   24.376676]  ? ip_output+0x135/0x135
[   24.376775]  ? apparmor_socket_recvmsg+0x4b/0x4b
[   24.376830]  ? aa_sk_perm+0x5a/0x32a
[   24.376830]  ? apparmor_socket_recvmsg+0x4b/0x4b
[   24.376830]  ? udp_cmsg_send+0xe0/0xe0
[   24.376830]  inet_sendmsg+0x68/0x1a9
[   24.376830]  ? ipv4_mib_init_net+0x232/0x232
[   24.376830]  sock_sendmsg+0x42/0x8d
[   24.376830]  ___sys_sendmsg+0xf9/0x34e
[   24.376830]  ? find_next_iomem_res+0x36/0x11f
[   24.376830]  ? walk_system_ram_range+0x62/0xa6
[   24.376830]  ? _raw_spin_unlock_bh+0x30/0x63
[   24.376830]  ? pat_pagerange_is_ram+0x68/0x84
[   24.376830]  ? memtype_seq_stop+0x1/0x1
[   24.376830]  ? __get_locked_pte+0xb3/0x133
[   24.376830]  ? insert_pfn+0x7e/0xfb
[   24.376830]  ? __fdget+0xd/0xf
[   24.376830]  ? sockfd_lookup_light+0x13/0x9c
[   24.376830]  __sys_sendmmsg+0xe9/0x1c2
[   24.376830]  ? handle_mm_fault+0x97a/0x14ad
[   24.376830]  ? ktime_get_real_ts64+0x6a/0x19f
[   24.376830]  sys_sendmmsg+0x22/0x24
[   24.376830]  do_fast_syscall_32+0xc7/0x3b3
[   24.376830]  entry_SYSENTER_32+0x4e/0x7c
[   24.376830] EIP: 0xb7f2fb1d
[   24.376830] Code: 00 05 58 f8 ff ff 8b 55 08 8b 80 5c cd ff ff 85 d2 74 02 89 02 5d c3 8b 04 24 c3 8b 1c 24 c3 90 90 51 52 55 89 e5 0f 34 cd 80 <5d> 5a 59 c3 90 90 90 90 8d 76 00 58 b8 77 00 00 00 cd 80 90 8d 76 
[   24.376830] EAX: ffffffda EBX: 00000005 ECX: bffafe7c EDX: 00000002
[   24.376830] ESI: 00004000 EDI: bffafebc EBP: 127aaeb0 ESP: bffafd60
[   24.376830] DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 007b EFLAGS: 00200246
[   24.376830] ================================================================================


-- 
Meelis Roos (mroos@linux.ee)

^ permalink raw reply

* partnership offer
From: Rosarita Houmam @ 2018-07-29 13:52 UTC (permalink / raw)
  To: Recipients

[-- Attachment #1: Mail message body --]
[-- Type: text/plain, Size: 65 bytes --]

I want us to join hands as partners because i have a deal for you

[-- Attachment #2: Mail message body --]
[-- Type: text/html, Size: 164 bytes --]

^ permalink raw reply

* Re: [PATCH 1/2] net: socket: fix potential spectre v1 gadget in socketcall
From: Josh Poimboeuf @ 2018-07-29 13:59 UTC (permalink / raw)
  To: Jeremy Cline; +Cc: David S . Miller, netdev, linux-kernel, stable
In-Reply-To: <20180727224302.5503-2-jcline@redhat.com>

On Fri, Jul 27, 2018 at 10:43:01PM +0000, Jeremy Cline wrote:
> 'call' is a user-controlled value, so sanitize the array index after the
> bounds check to avoid speculating past the bounds of the 'nargs' array.
> 
> Found with the help of Smatch:
> 
> net/socket.c:2508 __do_sys_socketcall() warn: potential spectre issue
> 'nargs' [r] (local cap)
> 
> Cc: Josh Poimboeuf <jpoimboe@redhat.com>
> Cc: stable@vger.kernel.org
> Signed-off-by: Jeremy Cline <jcline@redhat.com>
> ---
>  net/socket.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/net/socket.c b/net/socket.c
> index 3015ddace71e..f15d5cbb3ba4 100644
> --- a/net/socket.c
> +++ b/net/socket.c
> @@ -89,6 +89,7 @@
>  #include <linux/magic.h>
>  #include <linux/slab.h>
>  #include <linux/xattr.h>
> +#include <linux/nospec.h>
>  
>  #include <linux/uaccess.h>
>  #include <asm/unistd.h>
> @@ -2504,6 +2505,7 @@ SYSCALL_DEFINE2(socketcall, int, call, unsigned long __user *, args)
>  
>  	if (call < 1 || call > SYS_SENDMMSG)
>  		return -EINVAL;
> +	call = array_index_nospec(call, SYS_SENDMMSG + 1);
>  
>  	len = nargs[call];
>  	if (len > sizeof(a))

Reviewed-by: Josh Poimboeuf <jpoimboe@redhat.com>

-- 
Josh

^ permalink raw reply

* Re: [PATCH 2/4] net: dsa: Add Lantiq / Intel GSWIP tag support
From: Hauke Mehrtens @ 2018-07-29 14:01 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: davem, netdev, vivien.didelot, f.fainelli, john, linux-mips, dev,
	hauke.mehrtens
In-Reply-To: <20180725142021.GB13891@lunn.ch>

On 07/25/2018 04:20 PM, Andrew Lunn wrote:
> On Sat, Jul 21, 2018 at 09:13:56PM +0200, Hauke Mehrtens wrote:
>> This handles the tag added by the PMAC on the VRX200 SoC line.
>>
>> The GSWIP uses internally a GSWIP special tag which is located after the
>> Ethernet header. The PMAC which connects the GSWIP to the CPU converts
>> this special tag used by the GSWIP into the PMAC special tag which is
>> added in front of the Ethernet header.
>>
>> This was tested with GSWIP 2.0 found in the VRX200 SoCs, other GSWIP
>> versions use slightly different PMAC special tags
>>
>> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
> 
> Hi Hauke
> 
> This looks good. A new minor nitpicks below.
> 
>> +#include <linux/bitops.h>
>> +#include <linux/etherdevice.h>
>> +#include <linux/skbuff.h>
>> +#include <net/dsa.h>
>> +
>> +#include "dsa_priv.h"
>> +
>> +
>> +#define GSWIP_TX_HEADER_LEN		4
> 
> Single newline is sufficient.

removed
> 
>> +/* Byte 3 */
>> +#define GSWIP_TX_CRCGEN_DIS		BIT(23)
> 
> BIT(23) in a byte is a bit odd.

OK, this should be BIT(7)
The ordering of these defines was also strange I fixed that.

> 
>> +#define GSWIP_TX_SLPID_SHIFT		0	/* source port ID */
>> +#define  GSWIP_TX_SLPID_CPU		2
>> +#define  GSWIP_TX_SLPID_APP1		3
>> +#define  GSWIP_TX_SLPID_APP2		4
>> +#define  GSWIP_TX_SLPID_APP3		5
>> +#define  GSWIP_TX_SLPID_APP4		6
>> +#define  GSWIP_TX_SLPID_APP5		7
>> +
>> +
>> +#define GSWIP_RX_HEADER_LEN	8
> 
> Single newline is sufficient. Please fix them all, if there are more
> of them.

ok

>> +
>> +/* special tag in RX path header */
>> +/* Byte 7 */
>> +#define GSWIP_RX_SPPID_SHIFT		4
>> +#define GSWIP_RX_SPPID_MASK		GENMASK(6, 4)
>> +
>> +static struct sk_buff *gswip_tag_rcv(struct sk_buff *skb,
>> +				     struct net_device *dev,
>> +				     struct packet_type *pt)
>> +{
>> +	int port;
>> +	u8 *gswip_tag;
>> +
>> +	if (unlikely(!pskb_may_pull(skb, GSWIP_RX_HEADER_LEN)))
>> +		return NULL;
>> +
>> +	gswip_tag = ((u8 *)skb->data) - ETH_HLEN;
> 
> The cast should not be needed, data already is an unsigned char.

OK, I removed that.

>> +	skb_pull_rcsum(skb, GSWIP_RX_HEADER_LEN);
>> +
>> +	/* Get source port information */
>> +	port = (gswip_tag[7] & GSWIP_RX_SPPID_MASK) >> GSWIP_RX_SPPID_SHIFT;
>> +	skb->dev = dsa_master_find_slave(dev, 0, port);
>> +	if (!skb->dev)
>> +		return NULL;
>> +
>> +	return skb;
>> +}
> 
>   Andrew
> 

^ permalink raw reply

* Re: [PATCH net-next] liquidio: remove redundant function cn23xx_dump_vf_iq_regs
From: David Miller @ 2018-07-29 15:31 UTC (permalink / raw)
  To: yuehaibing
  Cc: derek.chickles, satananda.burla, felix.manlunas, raghu.vatsavayi,
	linux-kernel, netdev
In-Reply-To: <20180727115724.18964-1-yuehaibing@huawei.com>

From: YueHaibing <yuehaibing@huawei.com>
Date: Fri, 27 Jul 2018 19:57:24 +0800

> There are no in-tree callers.
> 
> Signed-off-by: YueHaibing <yuehaibing@huawei.com>

Applied, thank you.

^ permalink raw reply

* Re: [PATCH 3/4] net: lantiq: Add Lantiq / Intel vrx200 Ethernet driver
From: Hauke Mehrtens @ 2018-07-29 14:03 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: davem, netdev, vivien.didelot, f.fainelli, john, linux-mips, dev,
	hauke.mehrtens
In-Reply-To: <20180725152857.GB16819@lunn.ch>

On 07/25/2018 05:28 PM, Andrew Lunn wrote:
>> +	/* Make sure the firmware of the embedded GPHY is loaded before,
>> +	 * otherwise they will not be detectable on the MDIO bus.
>> +	 */
>> +	of_for_each_phandle(&it, err, np, "lantiq,phys", NULL, 0) {
>> +		phy_np = it.node;
>> +		if (phy_np) {
>> +			struct platform_device *phy = of_find_device_by_node(phy_np);
>> +
>> +			of_node_put(phy_np);
>> +			if (!platform_get_drvdata(phy))
>> +				return -EPROBE_DEFER;
>> +		}
>> +	}
> 
> Is there a device tree binding document for this somewhere?
> 
>    Andrew
> 

No, but I will create one.

I am also not sure iof this is the correct way of doing this.

We first have to load the FW into the Ethernet PHY though some generic
SoC registers and then we can find it normally on the MDIO bus and
interact with it like an external PHY on the MDIO bus.

Hauke

^ permalink raw reply

* Re: [PATCH net-next] qed: remove redundant functions qed_set_gft_event_id_cm_hdr
From: David Miller @ 2018-07-29 15:33 UTC (permalink / raw)
  To: yuehaibing; +Cc: Ariel.Elior, everest-linux-l2, linux-kernel, netdev
In-Reply-To: <20180727132427.17588-1-yuehaibing@huawei.com>

From: YueHaibing <yuehaibing@huawei.com>
Date: Fri, 27 Jul 2018 21:24:27 +0800

> There are no in-tree callers of qed_set_gft_event_id_cm_hdr.
> 
> Signed-off-by: YueHaibing <yuehaibing@huawei.com>

Also applied, thank you.

^ permalink raw reply

* Re: [PATCH v2] Add BPF_SYNCHRONIZE_MAPS bpf(2) command
From: Alexei Starovoitov @ 2018-07-29 15:51 UTC (permalink / raw)
  To: Daniel Colascione
  Cc: Joel Fernandes, LKML, Tim Murray, Network Development,
	Lorenzo Colitti, Chenbo Feng, Mathieu Desnoyers,
	Alexei Starovoitov, Daniel Borkmann

On Thu, Jul 26, 2018 at 7:51 PM, Daniel Colascione <dancol@google.com> wrote:
> BPF_SYNCHRONIZE_MAPS waits for the release of any references to a BPF
> map made by a BPF program that is running at the time the
> BPF_SYNCHRONIZE_MAPS command is issued. The purpose of this command is
> to provide a means for userspace to replace a BPF map with another,
> newer version, then ensure that no component is still using the "old"
> map before manipulating the "old" map in some way.
>
> Signed-off-by: Daniel Colascione <dancol@google.com>
> ---
>  include/uapi/linux/bpf.h |  9 +++++++++
>  kernel/bpf/syscall.c     | 13 +++++++++++++
>  2 files changed, 22 insertions(+)
>
> diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
> index b7db3261c62d..5b27e9117d3e 100644
> --- a/include/uapi/linux/bpf.h
> +++ b/include/uapi/linux/bpf.h
> @@ -75,6 +75,14 @@ struct bpf_lpm_trie_key {
>         __u8    data[0];        /* Arbitrary size */
>  };
>
> +/* BPF_SYNCHRONIZE_MAPS waits for the release of any references to a
> + * BPF map made by a BPF program that is running at the time the
> + * BPF_SYNCHRONIZE_MAPS command is issued. The purpose of this command

that doesn't sound right to me.
such command won't wait for the release of the references.
in case of map-in-map the program does not hold
the references to inner map (only to outer map).

> + * is to provide a means for userspace to replace a BPF map with
> + * another, newer version, then ensure that no component is still
> + * using the "old" map before manipulating the "old" map in some way.
> + */

that's correct, but the whole paragraph still reads too
'generic' which will lead to confusion,
whereas the use case is map-in-map only.
I think bpf_sync_inner_map or
bpf_sync_map_in_map would be better
choices for the name.

btw i don't have reliable internet access at the moment,
so pls excuse the delays.

^ permalink raw reply

* RE: Done
From: Walker, Alan @ 2018-07-29 14:24 UTC (permalink / raw)
  To: Walker, Alan
In-Reply-To: <4832C5444015EC41B43CF92A26F4B2B575D7CADC@NSFAAEX2.nsf.org>

[-- Attachment #1: Type: text/plain, Size: 155 bytes --]









$ 3million donated to you, E-mail tsouami14@gmail.com<mailto:tsouami14@gmail.com> for funds confirmation.

















[-- Attachment #2: Type: text/html, Size: 2342 bytes --]

^ permalink raw reply

* Re: [RFC] Add BPF_SYNCHRONIZE bpf(2) command
From: Alexei Starovoitov @ 2018-07-29 15:57 UTC (permalink / raw)
  To: Daniel Colascione
  Cc: Joel Fernandes, Lorenzo Colitti, Chenbo Feng, Mathieu Desnoyers,
	Joel Fernandes, Alexei Starovoitov, lkml, Tim Murray,
	Daniel Borkmann, netdev

On Fri, Jul 27, 2018 at 10:17 PM, Daniel Colascione <dancol@google.com> wrote:
> On Sat, Jul 14, 2018 at 11:18 AM, Joel Fernandes <joel@joelfernandes.org>
> wrote:
>>
>> By the way just curious I was briefly going through kernel/bpf/arraymap.c.
>> How are you protecting against load-store tearing of values of array map
>> updates/lookups?
>>
>> For example, if userspace reads an array map at a particular index, while
>> another CPU is updating it, then userspace can read partial values /
>> half-updated values right? Since rcu_read_lock is in use, I was hoping to
>> find something like rcu_assign_pointer there to protect readers against
>> concurrent updates.  Thanks for any clarification.
>
>
> I'm also curious about the answer to this question.

i'm not sure I understand the question.
bpf_map_type_array is a C-like array.
There is no locking of elements.
If single program executing on two cpus
and accesses the same value it will collide.
Same goes for user space vs prog parallel access.
bpf long_memcpy is an attempt to provide minimal
level of automicity when values are aligned and
size==long.

^ permalink raw reply

* Re: [PATCH 2/2] net: socket: Fix potential spectre v1 gadget in sock_is_registered
From: Jeremy Cline @ 2018-07-29 15:59 UTC (permalink / raw)
  To: Josh Poimboeuf; +Cc: David S . Miller, netdev, linux-kernel, stable
In-Reply-To: <20180729135906.lgqo5ue6it3hl2da@treble>

On 07/29/2018 09:59 AM, Josh Poimboeuf wrote:
> On Fri, Jul 27, 2018 at 10:43:02PM +0000, Jeremy Cline wrote:
>> 'family' can be a user-controlled value, so sanitize it after the bounds
>> check to avoid speculative out-of-bounds access.
>>
>> Cc: Josh Poimboeuf <jpoimboe@redhat.com>
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Jeremy Cline <jcline@redhat.com>
>> ---
>>  net/socket.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/net/socket.c b/net/socket.c
>> index f15d5cbb3ba4..608e29ae6baf 100644
>> --- a/net/socket.c
>> +++ b/net/socket.c
>> @@ -2672,7 +2672,8 @@ EXPORT_SYMBOL(sock_unregister);
>>  
>>  bool sock_is_registered(int family)
>>  {
>> -	return family < NPROTO && rcu_access_pointer(net_families[family]);
>> +	return family < NPROTO &&
>> +		rcu_access_pointer(net_families[array_index_nospec(family, NPROTO)]);
>>  }
>>  
>>  static int __init sock_init(void)
> 
> This is another one where I think it would be better to do the nospec
> clamp higher up the call chain.  The untrusted 'family' value comes from
> __sock_diag_cmd():
> 
> __sock_diag_cmd
>   sock_load_diag_module
>     sock_is_registered
> 
> That function has a bounds check, and also uses the value in some other
> array accesses:
> 
> 	if (req->sdiag_family >= AF_MAX)
> 		return -EINVAL;
> 
> 	if (sock_diag_handlers[req->sdiag_family] == NULL)
> 		sock_load_diag_module(req->sdiag_family, 0);
> 
> 	mutex_lock(&sock_diag_table_mutex);
> 	hndl = sock_diag_handlers[req->sdiag_family];
> 	...
> 
> So I think clamping 'req->sdiag_family' right after the bounds check
> would be the way to go.
> 

Indeed, the clamp there would cover this clamp. I had a scheme that I
quickly fix all the gadgets in functions with local comparisons, but
clearly that's going to result in call chains with multiple clamps.

I can fix this in a follow-up with a clamp here, or respin this patch
set, whatever is easier for David.

Thanks for the review!

^ permalink raw reply

* Re: [PATCH] xen-netfront: wait xenbus state change when load module manually
From: David Miller @ 2018-07-29 15:30 UTC (permalink / raw)
  To: xiliang; +Cc: netdev, xen-devel, jgross, boris.ostrovsky, linux-kernel
In-Reply-To: <20180727095608.25210-1-xiliang@redhat.com>

From: Xiao Liang <xiliang@redhat.com>
Date: Fri, 27 Jul 2018 17:56:08 +0800

> @@ -1330,6 +1331,11 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)
>  	netif_carrier_off(netdev);
>  
>  	xenbus_switch_state(dev, XenbusStateInitialising);
> +	wait_event(module_load_q,
> +			   xenbus_read_driver_state(dev->otherend) !=
> +			   XenbusStateClosed &&
> +			   xenbus_read_driver_state(dev->otherend) !=
> +			   XenbusStateUnknown);
>  	return netdev;
>  
>   exit:

What performs the wakeups that will trigger for this sleep site?

Thank you.

^ permalink raw reply

* Re: pull-request: can-next 2018-01-16,pull-request: can-next 2018-01-16
From: David Miller @ 2018-07-29 15:35 UTC (permalink / raw)
  To: mkl; +Cc: netdev, kernel, linux-can
In-Reply-To: <60b8c42f-5c0b-d953-bdae-e83c01b408c4@pengutronix.de>

From: Marc Kleine-Budde <mkl@pengutronix.de>
Date: Fri, 27 Jul 2018 11:40:10 +0200

> this is a pull request for net-next/master consisting of 38 patches.
 ...
> The following changes since commit ecbcd689d74a394b711d2360aef7e5d007ec9d98:
> 
>   Merge tag 'mlx5e-updates-2018-07-26' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux (2018-07-26 21:33:24 -0700)
> 
> are available in the Git repository at:
> 
>   ssh://git@gitolite.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git tags/linux-can-next-for-4.19-20180727

Pulled, thanks Marc.

^ permalink raw reply

* Re: [PATCH bpf] bpf: fix bpf_skb_load_bytes_relative pkt length check
From: Alexei Starovoitov @ 2018-07-29 15:41 UTC (permalink / raw)
  To: Daniel Borkmann; +Cc: Network Development, Martin KaFai Lau

On Sat, Jul 28, 2018 at 10:04 PM, Daniel Borkmann <daniel@iogearbox.net> wrote:
> The len > skb_headlen(skb) cannot be used as a maximum upper bound
> for the packet length since it does not have any relation to the full
> linear packet length when filtering is used from upper layers (e.g.
> in case of reuseport BPF programs) as by then skb->data, skb->len
> already got mangled through __skb_pull() and others.
>
> Fixes: 4e1ec56cdc59 ("bpf: add skb_load_bytes_relative helper")
> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
> Acked-by: Martin KaFai Lau <kafai@fb.com>

Great catch.
Acked-by: Alexei Starovoitov <ast@kernel.org>

^ permalink raw reply

* Re: [PATCH 3/4] net: lantiq: Add Lantiq / Intel vrx200 Ethernet driver
From: Andrew Lunn @ 2018-07-29 15:51 UTC (permalink / raw)
  To: Hauke Mehrtens
  Cc: davem, netdev, vivien.didelot, f.fainelli, john, linux-mips, dev,
	hauke.mehrtens
In-Reply-To: <0ba31982-1657-aea8-42bc-0ea838621256@hauke-m.de>

On Sun, Jul 29, 2018 at 04:03:10PM +0200, Hauke Mehrtens wrote:
> On 07/25/2018 05:28 PM, Andrew Lunn wrote:
> >> +	/* Make sure the firmware of the embedded GPHY is loaded before,
> >> +	 * otherwise they will not be detectable on the MDIO bus.
> >> +	 */
> >> +	of_for_each_phandle(&it, err, np, "lantiq,phys", NULL, 0) {
> >> +		phy_np = it.node;
> >> +		if (phy_np) {
> >> +			struct platform_device *phy = of_find_device_by_node(phy_np);
> >> +
> >> +			of_node_put(phy_np);
> >> +			if (!platform_get_drvdata(phy))
> >> +				return -EPROBE_DEFER;
> >> +		}
> >> +	}
> > 
> > Is there a device tree binding document for this somewhere?
> > 
> >    Andrew
> > 
> 
> No, but I will create one.
> 
> I am also not sure iof this is the correct way of doing this.
> 
> We first have to load the FW into the Ethernet PHY though some generic
> SoC registers and then we can find it normally on the MDIO bus and
> interact with it like an external PHY on the MDIO bus.

Hi Hauke

It look sensible so far, but it would be good to post the PHY firmware
download code as well. Lets see the big picture, then we can decide if
there is a better way.

    Andrew

^ permalink raw reply

* Re: [PATCH 3/4] net: lantiq: Add Lantiq / Intel vrx200 Ethernet driver
From: Hauke Mehrtens @ 2018-07-29 15:53 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: davem, netdev, vivien.didelot, f.fainelli, john, linux-mips, dev,
	hauke.mehrtens
In-Reply-To: <20180729155106.GB13198@lunn.ch>

On 07/29/2018 05:51 PM, Andrew Lunn wrote:
> On Sun, Jul 29, 2018 at 04:03:10PM +0200, Hauke Mehrtens wrote:
>> On 07/25/2018 05:28 PM, Andrew Lunn wrote:
>>>> +	/* Make sure the firmware of the embedded GPHY is loaded before,
>>>> +	 * otherwise they will not be detectable on the MDIO bus.
>>>> +	 */
>>>> +	of_for_each_phandle(&it, err, np, "lantiq,phys", NULL, 0) {
>>>> +		phy_np = it.node;
>>>> +		if (phy_np) {
>>>> +			struct platform_device *phy = of_find_device_by_node(phy_np);
>>>> +
>>>> +			of_node_put(phy_np);
>>>> +			if (!platform_get_drvdata(phy))
>>>> +				return -EPROBE_DEFER;
>>>> +		}
>>>> +	}
>>>
>>> Is there a device tree binding document for this somewhere?
>>>
>>>    Andrew
>>>
>>
>> No, but I will create one.
>>
>> I am also not sure iof this is the correct way of doing this.
>>
>> We first have to load the FW into the Ethernet PHY though some generic
>> SoC registers and then we can find it normally on the MDIO bus and
>> interact with it like an external PHY on the MDIO bus.
> 
> Hi Hauke
> 
> It look sensible so far, but it would be good to post the PHY firmware
> download code as well. Lets see the big picture, then we can decide if
> there is a better way.

Hi Andrew,

It is already in the kernel tree and can be found here:
https://elixir.bootlin.com/linux/v4.18-rc6/source/drivers/soc/lantiq/gphy.c

I am thinking about merging this into the switch driver, then we do not
have to configure the dependency any more.

Hauke

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox