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

Commit d24bc648 authored by Dean Luick's avatar Dean Luick Committed by Doug Ledford
Browse files

staging/rdma/hfi1: Use device file minor to identify EPROM



When writing to the EPROM, the driver will always use the
"first" device.  This is incorrect for multiple cards.

Use the device file minor to determine the device to use.
Reject the generic device file.

Reviewed-by: default avatarMitko Haralanov <mitko.haralanov@intel.com>
Signed-off-by: default avatarDean Luick <dean.luick@intel.com>
Signed-off-by: default avatarJubin John <jubin.john@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 82ab09e1
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -353,21 +353,26 @@ static inline u32 extract_rstart(u32 composite)
 *
 * Return 0 on success, -ERRNO on error
 */
int handle_eprom_command(const struct hfi1_cmd *cmd)
int handle_eprom_command(struct file *fp, const struct hfi1_cmd *cmd)
{
	struct hfi1_devdata *dd;
	u32 dev_id;
	u32 rlen;	/* range length */
	u32 rstart;	/* range start */
	int i_minor;
	int ret = 0;

	/*
	 * The EPROM is per-device, so use unit 0 as that will always
	 * exist.
	 * Map the device file to device data using the relative minor.
	 * The device file minor number is the unit number + 1.  0 is
	 * the generic device file - reject it.
	 */
	dd = hfi1_lookup(0);
	i_minor = iminor(file_inode(fp)) - HFI1_USER_MINOR_BASE;
	if (i_minor <= 0)
		return -EINVAL;
	dd = hfi1_lookup(i_minor - 1);
	if (!dd) {
		pr_err("%s: cannot find unit 0!\n", __func__);
		pr_err("%s: cannot find unit %d!\n", __func__, i_minor);
		return -EINVAL;
	}

+1 −1
Original line number Diff line number Diff line
@@ -52,4 +52,4 @@ struct hfi1_cmd;
struct hfi1_devdata;

int eprom_init(struct hfi1_devdata *dd);
int handle_eprom_command(const struct hfi1_cmd *cmd);
int handle_eprom_command(struct file *fp, const struct hfi1_cmd *cmd);
+1 −1
Original line number Diff line number Diff line
@@ -409,7 +409,7 @@ static ssize_t hfi1_file_write(struct file *fp, const char __user *data,
	case HFI1_CMD_EP_ERASE_RANGE:
	case HFI1_CMD_EP_READ_RANGE:
	case HFI1_CMD_EP_WRITE_RANGE:
		ret = handle_eprom_command(&cmd);
		ret = handle_eprom_command(fp, &cmd);
		break;
	}