rpmsg updates for v5.20
This contains fixes and cleanups in the rpmsg core, Qualcomm SMD and GLINK drivers, a circular lock dependency in the Mediatek driver and the a possible race condition in the rpmsg_char driver is resolved. -----BEGIN PGP SIGNATURE----- iQJPBAABCAA5FiEEBd4DzF816k8JZtUlCx85Pw2ZrcUFAmLxNj0bHGJqb3JuLmFu ZGVyc3NvbkBsaW5hcm8ub3JnAAoJEAsfOT8Nma3FpRAP/2PWKUdKA2f5mlpKNRxp pSaE0Bf4s9wXrurHRZQji9O8wxljq4cfJaTZNZorkC6K4TAh3c5V4qqF4wuerNrW bx5+zKOaSbFMC9KZTuUHDkINMQ8Df3P+tRnjhPBcGOI/+DP8wlzA46/5IJLRPEYQ sljpJ5XU3dFWhsFe5XeOxeYyWiJji3pyZBEm4CCfLhoeNQ+6Gcd9wwjaMOB7PS1Q 9QhHmDYHYMwPwIcIH6uoUMb4AixiWQzTS0vohZwdXeeupVy1diLeccMzssOGDRb5 ImfG7EabNijc+VSnKCcoxDj10Zv24PHUurcuyROZi5+3Y5ukzw774qAxHSBItlSN UbBgOd2K/AobdiehEMx+/kdbGYh8w9BJ07loJItZKms7VDk1rY9eEJRWip/p3+BY QQFdIkIGyqCFPPcrTPxrPB6LgS5oYHScf6tC7N38N+4Ve1iNoQXC0jXWyN413rDU Ea/TrYLl9z+x/mZ+gECx5dFoq89SIULGreMK+bIYWixWk7haNYc2dv/gacsUgTax aDvJD87alWj2lg+jJNQh+ulYna8LwH6yUX9HjaTBZ1zJaaDDJfex+BvKeg/kNgg2 9QfMCaFU4bdoNRMKup4ujLmK+mhnwK70pAXY5rb/TqY3JaVVR6EzWMKosesfpvUF 3FcGpKfTAY72T/ytcDXBOAHz =xoKP -----END PGP SIGNATURE----- Merge tag 'rpmsg-v5.20' of git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux Pull rpmsg updates from Bjorn Andersson: "This contains fixes and cleanups in the rpmsg core, Qualcomm SMD and GLINK drivers, a circular lock dependency in the Mediatek driver and a possible race condition in the rpmsg_char driver is resolved" * tag 'rpmsg-v5.20' of git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux: rpmsg: convert sysfs snprintf to sysfs_emit rpmsg: qcom_smd: Fix refcount leak in qcom_smd_parse_edge rpmsg: qcom: correct kerneldoc rpmsg: qcom: glink: remove unused name rpmsg: qcom: glink: replace strncpy() with strscpy_pad() rpmsg: Strcpy is not safe, use strscpy_pad() instead rpmsg: Fix possible refcount leak in rpmsg_register_device_override() rpmsg: Fix parameter naming for announce_create/destroy ops rpmsg: mtk_rpmsg: Fix circular locking dependency rpmsg: char: Add mutex protection for rpmsg_eptdev_open()
This commit is contained in:
commit
c72687614b
@ -234,7 +234,9 @@ static void mtk_register_device_work_function(struct work_struct *register_work)
|
||||
if (info->registered)
|
||||
continue;
|
||||
|
||||
mutex_unlock(&subdev->channels_lock);
|
||||
ret = mtk_rpmsg_register_device(subdev, &info->info);
|
||||
mutex_lock(&subdev->channels_lock);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Can't create rpmsg_device\n");
|
||||
continue;
|
||||
|
@ -98,8 +98,6 @@ struct glink_core_rx_intent {
|
||||
struct qcom_glink {
|
||||
struct device *dev;
|
||||
|
||||
const char *name;
|
||||
|
||||
struct mbox_client mbox_client;
|
||||
struct mbox_chan *mbox_chan;
|
||||
|
||||
@ -1546,7 +1544,7 @@ static void qcom_glink_rx_close(struct qcom_glink *glink, unsigned int rcid)
|
||||
cancel_work_sync(&channel->intent_work);
|
||||
|
||||
if (channel->rpdev) {
|
||||
strncpy(chinfo.name, channel->name, sizeof(chinfo.name));
|
||||
strscpy_pad(chinfo.name, channel->name, sizeof(chinfo.name));
|
||||
chinfo.src = RPMSG_ADDR_ANY;
|
||||
chinfo.dst = RPMSG_ADDR_ANY;
|
||||
|
||||
@ -1674,7 +1672,7 @@ static ssize_t rpmsg_name_show(struct device *dev,
|
||||
if (ret < 0)
|
||||
name = dev->of_node->name;
|
||||
|
||||
return snprintf(buf, RPMSG_NAME_SIZE, "%s\n", name);
|
||||
return sysfs_emit(buf, "%s\n", name);
|
||||
}
|
||||
static DEVICE_ATTR_RO(rpmsg_name);
|
||||
|
||||
@ -1755,10 +1753,6 @@ struct qcom_glink *qcom_glink_native_probe(struct device *dev,
|
||||
if (ret)
|
||||
dev_err(dev, "failed to add groups\n");
|
||||
|
||||
ret = of_property_read_string(dev->of_node, "label", &glink->name);
|
||||
if (ret < 0)
|
||||
glink->name = dev->of_node->name;
|
||||
|
||||
glink->mbox_client.dev = dev;
|
||||
glink->mbox_client.knows_txdone = true;
|
||||
glink->mbox_chan = mbox_request_channel(&glink->mbox_client, 0);
|
||||
|
@ -39,7 +39,7 @@ struct cleanup_done_msg {
|
||||
__le32 seq_num;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* G-Link SSR protocol commands
|
||||
*/
|
||||
#define GLINK_SSR_DO_CLEANUP 0
|
||||
|
@ -729,11 +729,11 @@ static int qcom_smd_write_fifo(struct qcom_smd_channel *channel,
|
||||
}
|
||||
|
||||
/**
|
||||
* qcom_smd_send - write data to smd channel
|
||||
* __qcom_smd_send - write data to smd channel
|
||||
* @channel: channel handle
|
||||
* @data: buffer of data to write
|
||||
* @len: number of bytes to write
|
||||
* @wait: flag to indicate if write has ca wait
|
||||
* @wait: flag to indicate if write can wait
|
||||
*
|
||||
* This is a blocking write of len bytes into the channel's tx ring buffer and
|
||||
* signal the remote end. It will sleep until there is enough space available
|
||||
@ -1089,7 +1089,7 @@ static int qcom_smd_create_device(struct qcom_smd_channel *channel)
|
||||
|
||||
/* Assign public information to the rpmsg_device */
|
||||
rpdev = &qsdev->rpdev;
|
||||
strncpy(rpdev->id.name, channel->name, RPMSG_NAME_SIZE);
|
||||
strscpy_pad(rpdev->id.name, channel->name, RPMSG_NAME_SIZE);
|
||||
rpdev->src = RPMSG_ADDR_ANY;
|
||||
rpdev->dst = RPMSG_ADDR_ANY;
|
||||
|
||||
@ -1323,7 +1323,7 @@ static void qcom_channel_state_worker(struct work_struct *work)
|
||||
|
||||
spin_unlock_irqrestore(&edge->channels_lock, flags);
|
||||
|
||||
strncpy(chinfo.name, channel->name, sizeof(chinfo.name));
|
||||
strscpy_pad(chinfo.name, channel->name, sizeof(chinfo.name));
|
||||
chinfo.src = RPMSG_ADDR_ANY;
|
||||
chinfo.dst = RPMSG_ADDR_ANY;
|
||||
rpmsg_unregister_device(&edge->dev, &chinfo);
|
||||
@ -1383,6 +1383,7 @@ static int qcom_smd_parse_edge(struct device *dev,
|
||||
}
|
||||
|
||||
edge->ipc_regmap = syscon_node_to_regmap(syscon_np);
|
||||
of_node_put(syscon_np);
|
||||
if (IS_ERR(edge->ipc_regmap)) {
|
||||
ret = PTR_ERR(edge->ipc_regmap);
|
||||
goto put_node;
|
||||
|
@ -120,8 +120,11 @@ static int rpmsg_eptdev_open(struct inode *inode, struct file *filp)
|
||||
struct rpmsg_device *rpdev = eptdev->rpdev;
|
||||
struct device *dev = &eptdev->dev;
|
||||
|
||||
if (eptdev->ept)
|
||||
mutex_lock(&eptdev->ept_lock);
|
||||
if (eptdev->ept) {
|
||||
mutex_unlock(&eptdev->ept_lock);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
get_device(dev);
|
||||
|
||||
@ -137,11 +140,13 @@ static int rpmsg_eptdev_open(struct inode *inode, struct file *filp)
|
||||
if (!ept) {
|
||||
dev_err(dev, "failed to open %s\n", eptdev->chinfo.name);
|
||||
put_device(dev);
|
||||
mutex_unlock(&eptdev->ept_lock);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
eptdev->ept = ept;
|
||||
filp->private_data = eptdev;
|
||||
mutex_unlock(&eptdev->ept_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -604,7 +604,7 @@ int rpmsg_register_device_override(struct rpmsg_device *rpdev,
|
||||
int ret;
|
||||
|
||||
if (driver_override)
|
||||
strcpy(rpdev->id.name, driver_override);
|
||||
strscpy_pad(rpdev->id.name, driver_override, RPMSG_NAME_SIZE);
|
||||
|
||||
dev_set_name(dev, "%s.%s.%d.%d", dev_name(dev->parent),
|
||||
rpdev->id.name, rpdev->src, rpdev->dst);
|
||||
@ -618,6 +618,7 @@ int rpmsg_register_device_override(struct rpmsg_device *rpdev,
|
||||
strlen(driver_override));
|
||||
if (ret) {
|
||||
dev_err(dev, "device_set_override failed: %d\n", ret);
|
||||
put_device(dev);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
@ -41,8 +41,8 @@ struct rpmsg_device_ops {
|
||||
rpmsg_rx_cb_t cb, void *priv,
|
||||
struct rpmsg_channel_info chinfo);
|
||||
|
||||
int (*announce_create)(struct rpmsg_device *ept);
|
||||
int (*announce_destroy)(struct rpmsg_device *ept);
|
||||
int (*announce_create)(struct rpmsg_device *rpdev);
|
||||
int (*announce_destroy)(struct rpmsg_device *rpdev);
|
||||
};
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user