Commit 273889e3 authored by David S. Miller's avatar David S. Miller
Browse files

Merge tag 'mlx5-updates-2017-06-16' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux



Saeed Mahameed says:

====================
Mellanox mlx5 updates and cleanups 2017-06-16

mlx5-updates-2017-06-16

This series provide some updates and cleanups for mlx5 core and netdevice
driver.

From Eli Cohen, add a missing event string.
From Or Gerlitz, some checkpatch cleanups.
From Moni, Disalbe HW level LAG when SRIOV is enabled.
From Tariq, A code reuse cleanup in aRFS flow.
From Itay Aveksis, Typo fix.
From Gal Pressman, ethtool statistics updates and "update stats" deferred work optimizations.
From Majd Dibbiny, Fast unload support on kernel shutdown.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents a1a6b7ea 8812c24d
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -439,7 +439,7 @@ static void get_atomic_caps(struct mlx5_ib_dev *dev,
	u8 atomic_operations = MLX5_CAP_ATOMIC(dev->mdev, atomic_operations);
	u8 atomic_operations = MLX5_CAP_ATOMIC(dev->mdev, atomic_operations);
	u8 atomic_size_qp = MLX5_CAP_ATOMIC(dev->mdev, atomic_size_qp);
	u8 atomic_size_qp = MLX5_CAP_ATOMIC(dev->mdev, atomic_size_qp);
	u8 atomic_req_8B_endianness_mode =
	u8 atomic_req_8B_endianness_mode =
		MLX5_CAP_ATOMIC(dev->mdev, atomic_req_8B_endianess_mode);
		MLX5_CAP_ATOMIC(dev->mdev, atomic_req_8B_endianness_mode);


	/* Check if HW supports 8 bytes standard atomic operations and capable
	/* Check if HW supports 8 bytes standard atomic operations and capable
	 * of host endianness respond
	 * of host endianness respond
+0 −1
Original line number Original line Diff line number Diff line
@@ -274,7 +274,6 @@ void mlx5_db_free(struct mlx5_core_dev *dev, struct mlx5_db *db)
}
}
EXPORT_SYMBOL_GPL(mlx5_db_free);
EXPORT_SYMBOL_GPL(mlx5_db_free);



void mlx5_fill_page_array(struct mlx5_buf *buf, __be64 *pas)
void mlx5_fill_page_array(struct mlx5_buf *buf, __be64 *pas)
{
{
	u64 addr;
	u64 addr;
+25 −11
Original line number Original line Diff line number Diff line
@@ -217,7 +217,6 @@ static void free_cmd(struct mlx5_cmd_work_ent *ent)
	kfree(ent);
	kfree(ent);
}
}



static int verify_signature(struct mlx5_cmd_work_ent *ent)
static int verify_signature(struct mlx5_cmd_work_ent *ent)
{
{
	struct mlx5_cmd_mailbox *next = ent->out->next;
	struct mlx5_cmd_mailbox *next = ent->out->next;
@@ -786,6 +785,8 @@ static void cmd_work_handler(struct work_struct *work)
	struct mlx5_cmd_layout *lay;
	struct mlx5_cmd_layout *lay;
	struct semaphore *sem;
	struct semaphore *sem;
	unsigned long flags;
	unsigned long flags;
	bool poll_cmd = ent->polling;



	sem = ent->page_queue ? &cmd->pages_sem : &cmd->sem;
	sem = ent->page_queue ? &cmd->pages_sem : &cmd->sem;
	down(sem);
	down(sem);
@@ -846,7 +847,7 @@ static void cmd_work_handler(struct work_struct *work)
	iowrite32be(1 << ent->idx, &dev->iseg->cmd_dbell);
	iowrite32be(1 << ent->idx, &dev->iseg->cmd_dbell);
	mmiowb();
	mmiowb();
	/* if not in polling don't use ent after this point */
	/* if not in polling don't use ent after this point */
	if (cmd->mode == CMD_MODE_POLLING) {
	if (cmd->mode == CMD_MODE_POLLING || poll_cmd) {
		poll_timeout(ent);
		poll_timeout(ent);
		/* make sure we read the descriptor after ownership is SW */
		/* make sure we read the descriptor after ownership is SW */
		rmb();
		rmb();
@@ -874,7 +875,7 @@ static const char *deliv_status_to_str(u8 status)
	case MLX5_CMD_DELIVERY_STAT_IN_LENGTH_ERR:
	case MLX5_CMD_DELIVERY_STAT_IN_LENGTH_ERR:
		return "command input length error";
		return "command input length error";
	case MLX5_CMD_DELIVERY_STAT_OUT_LENGTH_ERR:
	case MLX5_CMD_DELIVERY_STAT_OUT_LENGTH_ERR:
		return "command ouput length error";
		return "command output length error";
	case MLX5_CMD_DELIVERY_STAT_RES_FLD_NOT_CLR_ERR:
	case MLX5_CMD_DELIVERY_STAT_RES_FLD_NOT_CLR_ERR:
		return "reserved fields not cleared";
		return "reserved fields not cleared";
	case MLX5_CMD_DELIVERY_STAT_CMD_DESCR_ERR:
	case MLX5_CMD_DELIVERY_STAT_CMD_DESCR_ERR:
@@ -890,7 +891,7 @@ static int wait_func(struct mlx5_core_dev *dev, struct mlx5_cmd_work_ent *ent)
	struct mlx5_cmd *cmd = &dev->cmd;
	struct mlx5_cmd *cmd = &dev->cmd;
	int err;
	int err;


	if (cmd->mode == CMD_MODE_POLLING) {
	if (cmd->mode == CMD_MODE_POLLING || ent->polling) {
		wait_for_completion(&ent->done);
		wait_for_completion(&ent->done);
	} else if (!wait_for_completion_timeout(&ent->done, timeout)) {
	} else if (!wait_for_completion_timeout(&ent->done, timeout)) {
		ent->ret = -ETIMEDOUT;
		ent->ret = -ETIMEDOUT;
@@ -918,7 +919,7 @@ static int mlx5_cmd_invoke(struct mlx5_core_dev *dev, struct mlx5_cmd_msg *in,
			   struct mlx5_cmd_msg *out, void *uout, int uout_size,
			   struct mlx5_cmd_msg *out, void *uout, int uout_size,
			   mlx5_cmd_cbk_t callback,
			   mlx5_cmd_cbk_t callback,
			   void *context, int page_queue, u8 *status,
			   void *context, int page_queue, u8 *status,
			   u8 token)
			   u8 token, bool force_polling)
{
{
	struct mlx5_cmd *cmd = &dev->cmd;
	struct mlx5_cmd *cmd = &dev->cmd;
	struct mlx5_cmd_work_ent *ent;
	struct mlx5_cmd_work_ent *ent;
@@ -936,6 +937,7 @@ static int mlx5_cmd_invoke(struct mlx5_core_dev *dev, struct mlx5_cmd_msg *in,
		return PTR_ERR(ent);
		return PTR_ERR(ent);


	ent->token = token;
	ent->token = token;
	ent->polling = force_polling;


	if (!callback)
	if (!callback)
		init_completion(&ent->done);
		init_completion(&ent->done);
@@ -1001,7 +1003,6 @@ static ssize_t dbg_write(struct file *filp, const char __user *buf,
	return err ? err : count;
	return err ? err : count;
}
}



static const struct file_operations fops = {
static const struct file_operations fops = {
	.owner	= THIS_MODULE,
	.owner	= THIS_MODULE,
	.open	= simple_open,
	.open	= simple_open,
@@ -1537,7 +1538,8 @@ static int is_manage_pages(void *in)
}
}


static int cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out,
static int cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out,
		    int out_size, mlx5_cmd_cbk_t callback, void *context)
		    int out_size, mlx5_cmd_cbk_t callback, void *context,
		    bool force_polling)
{
{
	struct mlx5_cmd_msg *inb;
	struct mlx5_cmd_msg *inb;
	struct mlx5_cmd_msg *outb;
	struct mlx5_cmd_msg *outb;
@@ -1582,7 +1584,7 @@ static int cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out,
	}
	}


	err = mlx5_cmd_invoke(dev, inb, outb, out, out_size, callback, context,
	err = mlx5_cmd_invoke(dev, inb, outb, out, out_size, callback, context,
			      pages_queue, &status, token);
			      pages_queue, &status, token, force_polling);
	if (err)
	if (err)
		goto out_out;
		goto out_out;


@@ -1610,7 +1612,7 @@ int mlx5_cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out,
{
{
	int err;
	int err;


	err = cmd_exec(dev, in, in_size, out, out_size, NULL, NULL);
	err = cmd_exec(dev, in, in_size, out, out_size, NULL, NULL, false);
	return err ? : mlx5_cmd_check(dev, in, out);
	return err ? : mlx5_cmd_check(dev, in, out);
}
}
EXPORT_SYMBOL(mlx5_cmd_exec);
EXPORT_SYMBOL(mlx5_cmd_exec);
@@ -1619,10 +1621,22 @@ int mlx5_cmd_exec_cb(struct mlx5_core_dev *dev, void *in, int in_size,
		     void *out, int out_size, mlx5_cmd_cbk_t callback,
		     void *out, int out_size, mlx5_cmd_cbk_t callback,
		     void *context)
		     void *context)
{
{
	return cmd_exec(dev, in, in_size, out, out_size, callback, context);
	return cmd_exec(dev, in, in_size, out, out_size, callback, context,
			false);
}
}
EXPORT_SYMBOL(mlx5_cmd_exec_cb);
EXPORT_SYMBOL(mlx5_cmd_exec_cb);


int mlx5_cmd_exec_polling(struct mlx5_core_dev *dev, void *in, int in_size,
			  void *out, int out_size)
{
	int err;

	err = cmd_exec(dev, in, in_size, out, out_size, NULL, NULL, true);

	return err ? : mlx5_cmd_check(dev, in, out);
}
EXPORT_SYMBOL(mlx5_cmd_exec_polling);

static void destroy_msg_cache(struct mlx5_core_dev *dev)
static void destroy_msg_cache(struct mlx5_core_dev *dev)
{
{
	struct cmd_msg_cache *ch;
	struct cmd_msg_cache *ch;
+0 −3
Original line number Original line Diff line number Diff line
@@ -168,7 +168,6 @@ static ssize_t average_read(struct file *filp, char __user *buf, size_t count,
	return ret;
	return ret;
}
}



static ssize_t average_write(struct file *filp, const char __user *buf,
static ssize_t average_write(struct file *filp, const char __user *buf,
			     size_t count, loff_t *pos)
			     size_t count, loff_t *pos)
{
{
@@ -466,7 +465,6 @@ static ssize_t dbg_read(struct file *filp, char __user *buf, size_t count,
		return -EINVAL;
		return -EINVAL;
	}
	}



	if (is_str)
	if (is_str)
		ret = snprintf(tbuf, sizeof(tbuf), "%s\n", (const char *)(unsigned long)field);
		ret = snprintf(tbuf, sizeof(tbuf), "%s\n", (const char *)(unsigned long)field);
	else
	else
@@ -562,7 +560,6 @@ void mlx5_debug_qp_remove(struct mlx5_core_dev *dev, struct mlx5_core_qp *qp)
		rem_res_tree(qp->dbg);
		rem_res_tree(qp->dbg);
}
}



int mlx5_debug_eq_add(struct mlx5_core_dev *dev, struct mlx5_eq *eq)
int mlx5_debug_eq_add(struct mlx5_core_dev *dev, struct mlx5_eq *eq)
{
{
	int err;
	int err;
+1 −1
Original line number Original line Diff line number Diff line
@@ -822,7 +822,7 @@ void mlx5e_rx_am(struct mlx5e_rq *rq);
void mlx5e_rx_am_work(struct work_struct *work);
void mlx5e_rx_am_work(struct work_struct *work);
struct mlx5e_cq_moder mlx5e_am_get_def_profile(u8 rx_cq_period_mode);
struct mlx5e_cq_moder mlx5e_am_get_def_profile(u8 rx_cq_period_mode);


void mlx5e_update_stats(struct mlx5e_priv *priv);
void mlx5e_update_stats(struct mlx5e_priv *priv, bool full);


int mlx5e_create_flow_steering(struct mlx5e_priv *priv);
int mlx5e_create_flow_steering(struct mlx5e_priv *priv);
void mlx5e_destroy_flow_steering(struct mlx5e_priv *priv);
void mlx5e_destroy_flow_steering(struct mlx5e_priv *priv);
Loading