Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 752a50ca authored by Jack Morgenstein's avatar Jack Morgenstein Committed by Roland Dreier
Browse files

mlx4_core: Pass an invalid PCI id number to VFs



Currently, VFs have 0 in their dev->caps.function field.  This is a
valid pci id (usually of the PF).  Instead, pass an invalid PCI id to
the VF via QUERY_FW, so that if the value gets accessed in the VF
driver, we'll catch the problem.

Signed-off-by: default avatarJack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
parent 6887a413
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -881,11 +881,12 @@ int mlx4_QUERY_FW(struct mlx4_dev *dev)
		((fw_ver & 0xffff0000ull) >> 16) |
		((fw_ver & 0xffff0000ull) >> 16) |
		((fw_ver & 0x0000ffffull) << 16);
		((fw_ver & 0x0000ffffull) << 16);


	MLX4_GET(lg, outbox, QUERY_FW_PPF_ID);
	dev->caps.function = lg;

	if (mlx4_is_slave(dev))
	if (mlx4_is_slave(dev))
		goto out;
		goto out;


	MLX4_GET(lg, outbox, QUERY_FW_PPF_ID);
	dev->caps.function = lg;


	MLX4_GET(cmd_if_rev, outbox, QUERY_FW_CMD_IF_REV_OFFSET);
	MLX4_GET(cmd_if_rev, outbox, QUERY_FW_CMD_IF_REV_OFFSET);
	if (cmd_if_rev < MLX4_COMMAND_INTERFACE_MIN_REV ||
	if (cmd_if_rev < MLX4_COMMAND_INTERFACE_MIN_REV ||
@@ -966,9 +967,12 @@ int mlx4_QUERY_FW_wrapper(struct mlx4_dev *dev, int slave,
	if (err)
	if (err)
		return err;
		return err;


	/* for slaves, zero out everything except FW version */
	/* for slaves, set pci PPF ID to invalid and zero out everything
	 * else except FW version */
	outbuf[0] = outbuf[1] = 0;
	outbuf[0] = outbuf[1] = 0;
	memset(&outbuf[8], 0, QUERY_FW_OUT_SIZE - 8);
	memset(&outbuf[8], 0, QUERY_FW_OUT_SIZE - 8);
	outbuf[QUERY_FW_PPF_ID] = MLX4_INVALID_SLAVE_ID;

	return 0;
	return 0;
}
}


+2 −0
Original line number Original line Diff line number Diff line
@@ -534,6 +534,8 @@ struct mlx4_init_port_param {
		if (((dev)->caps.port_mask[port] == MLX4_PORT_TYPE_IB) || \
		if (((dev)->caps.port_mask[port] == MLX4_PORT_TYPE_IB) || \
			((dev)->caps.flags & MLX4_DEV_CAP_FLAG_IBOE))
			((dev)->caps.flags & MLX4_DEV_CAP_FLAG_IBOE))


#define MLX4_INVALID_SLAVE_ID	0xFF

static inline int mlx4_is_master(struct mlx4_dev *dev)
static inline int mlx4_is_master(struct mlx4_dev *dev)
{
{
	return dev->flags & MLX4_FLAG_MASTER;
	return dev->flags & MLX4_FLAG_MASTER;