mirror of
https://github.com/SCST-project/scst.git
synced 2026-07-25 01:23:14 +00:00
Merge branch 'svn-trunk'
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
diff --git a/drivers/Makefile b/drivers/Makefile
|
||||
index 527a6da..db2c24f 100644
|
||||
index 31cf17dee252..b45c17aee468 100644
|
||||
--- a/drivers/Makefile
|
||||
+++ b/drivers/Makefile
|
||||
@@ -137,6 +137,7 @@ obj-$(CONFIG_SSB) += ssb/
|
||||
obj-$(CONFIG_BCMA) += bcma/
|
||||
obj-$(CONFIG_VHOST_RING) += vhost/
|
||||
obj-$(CONFIG_VLYNQ) += vlynq/
|
||||
@@ -75,6 +75,7 @@ obj-$(CONFIG_DAX) += dax/
|
||||
obj-$(CONFIG_DMA_SHARED_BUFFER) += dma-buf/
|
||||
obj-$(CONFIG_NUBUS) += nubus/
|
||||
obj-y += macintosh/
|
||||
+obj-$(CONFIG_SCST) += scst/
|
||||
obj-$(CONFIG_STAGING) += staging/
|
||||
obj-y += platform/
|
||||
#common clk code
|
||||
obj-$(CONFIG_IDE) += ide/
|
||||
obj-y += scsi/
|
||||
obj-y += nvme/
|
||||
|
||||
@@ -2305,7 +2305,8 @@ again:
|
||||
return res;
|
||||
}
|
||||
|
||||
static int dev_user_reply_get_cmd(struct file *file, void __user *arg)
|
||||
static int dev_user_reply_get_cmd(struct file *file,
|
||||
struct scst_user_get_cmd __user *get_cmd)
|
||||
{
|
||||
int res = 0, rc;
|
||||
struct scst_user_dev *dev;
|
||||
@@ -2320,9 +2321,7 @@ static int dev_user_reply_get_cmd(struct file *file, void __user *arg)
|
||||
goto out;
|
||||
|
||||
/* get_user() can't be used with 64-bit values on x86_32 */
|
||||
rc = copy_from_user(&ureply, (uint64_t __user *)
|
||||
&((struct scst_user_get_cmd __user *)arg)->preply,
|
||||
sizeof(ureply));
|
||||
rc = copy_from_user(&ureply, &get_cmd->preply, sizeof(ureply));
|
||||
if (unlikely(rc != 0)) {
|
||||
PRINT_ERROR("Failed to copy %d user's bytes", rc);
|
||||
res = -EFAULT;
|
||||
@@ -2333,9 +2332,9 @@ static int dev_user_reply_get_cmd(struct file *file, void __user *arg)
|
||||
dev->name);
|
||||
|
||||
if (ureply != 0) {
|
||||
unsigned long u = (unsigned long)ureply;
|
||||
void __user *u = (void __user *)ureply;
|
||||
|
||||
rc = copy_from_user(&reply, (void __user *)u, sizeof(reply));
|
||||
rc = copy_from_user(&reply, u, sizeof(reply));
|
||||
if (unlikely(rc != 0)) {
|
||||
PRINT_ERROR("Failed to copy %d user's bytes", rc);
|
||||
res = -EFAULT;
|
||||
@@ -2349,36 +2348,34 @@ static int dev_user_reply_get_cmd(struct file *file, void __user *arg)
|
||||
goto out;
|
||||
}
|
||||
|
||||
res = dev_user_get_cmd_to_user(dev, arg, true);
|
||||
res = dev_user_get_cmd_to_user(dev, get_cmd, true);
|
||||
|
||||
out:
|
||||
TRACE_EXIT_RES(res);
|
||||
return res;
|
||||
}
|
||||
|
||||
static int dev_user_reply_get_multi(struct file *file, void __user *arg)
|
||||
static int dev_user_reply_get_multi(struct file *file,
|
||||
struct scst_user_get_multi __user* gm)
|
||||
{
|
||||
int res = 0, rc;
|
||||
struct scst_user_dev *dev;
|
||||
struct scst_user_dev *dev = file->private_data;
|
||||
struct scst_user_reply_cmd __user *replies;
|
||||
int16_t i, replies_cnt, replies_done = 0, cmds_cnt = 0;
|
||||
|
||||
TRACE_ENTRY();
|
||||
|
||||
dev = (struct scst_user_dev *)file->private_data;
|
||||
res = dev_user_check_reg(dev);
|
||||
if (unlikely(res != 0))
|
||||
goto out;
|
||||
|
||||
res = get_user(replies_cnt, (int16_t __user *)
|
||||
&((struct scst_user_get_multi __user *)arg)->replies_cnt);
|
||||
res = get_user(replies_cnt, &gm->replies_cnt);
|
||||
if (unlikely(res < 0)) {
|
||||
PRINT_ERROR("%s", "Unable to get replies_cnt");
|
||||
goto out;
|
||||
}
|
||||
|
||||
res = get_user(cmds_cnt, (int16_t __user *)
|
||||
&((struct scst_user_get_multi __user *)arg)->cmds_cnt);
|
||||
res = get_user(cmds_cnt, &gm->cmds_cnt);
|
||||
if (unlikely(res < 0)) {
|
||||
PRINT_ERROR("%s", "Unable to get cmds_cnt");
|
||||
goto out;
|
||||
@@ -2391,8 +2388,7 @@ static int dev_user_reply_get_multi(struct file *file, void __user *arg)
|
||||
goto get_cmds;
|
||||
|
||||
/* get_user() can't be used with 64-bit values on x86_32 */
|
||||
rc = copy_from_user(&replies, (uint64_t __user *)
|
||||
&((struct scst_user_get_multi __user *)arg)->preplies, sizeof(replies));
|
||||
rc = copy_from_user(&replies, &gm->preplies, sizeof(replies));
|
||||
if (unlikely(rc != 0)) {
|
||||
PRINT_ERROR("%s", "Unable to get preply");
|
||||
res = -EFAULT;
|
||||
@@ -2419,15 +2415,13 @@ static int dev_user_reply_get_multi(struct file *file, void __user *arg)
|
||||
}
|
||||
|
||||
TRACE_DBG("Returning %d replies_done", replies_done);
|
||||
res = put_user(replies_done, (int16_t __user *)
|
||||
&((struct scst_user_get_multi __user *)arg)->replies_done);
|
||||
res = put_user(replies_done, &gm->replies_done);
|
||||
if (unlikely(res < 0))
|
||||
goto out;
|
||||
|
||||
get_cmds:
|
||||
for (i = 0; i < cmds_cnt; i++) {
|
||||
res = dev_user_get_cmd_to_user(dev,
|
||||
&((struct scst_user_get_multi __user *)arg)->cmds[i], i == 0);
|
||||
res = dev_user_get_cmd_to_user(dev, &gm->cmds[i], i == 0);
|
||||
if (res != 0) {
|
||||
if ((res == -EAGAIN) && (i > 0))
|
||||
res = 0;
|
||||
@@ -2436,8 +2430,7 @@ get_cmds:
|
||||
}
|
||||
|
||||
TRACE_DBG("Returning %d cmds_ret", i);
|
||||
rc = put_user(i, (int16_t __user *)
|
||||
&((struct scst_user_get_multi __user *)arg)->cmds_cnt);
|
||||
rc = put_user(i, &gm->cmds_cnt);
|
||||
if (unlikely(rc < 0)) {
|
||||
res = rc; /* this error is more important */
|
||||
goto out;
|
||||
@@ -2449,10 +2442,8 @@ out:
|
||||
|
||||
out_part_replies_done:
|
||||
TRACE_DBG("Partial returning %d replies_done", replies_done);
|
||||
put_user(replies_done, (int16_t __user *)
|
||||
&((struct scst_user_get_multi __user *)arg)->replies_done);
|
||||
rc = put_user(0, (int16_t __user *)
|
||||
&((struct scst_user_get_multi __user *)arg)->cmds_cnt);
|
||||
put_user(replies_done, &gm->replies_done);
|
||||
rc = put_user(0, &gm->cmds_cnt);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user