Hi, <snip> > > spinlock intent_lock initialization is missed ? right, should add that. >> kref_init(&channel->refcount); >> return channel; >> @@ -187,6 +215,7 @@ static void qcom_glink_channel_release(struct kref *ref) >> struct glink_channel *channel = container_of(ref, struct glink_channel, >> refcount); >> + idr_destroy(&channel->liids); > > idr_destroy shouldn`t be covered by intent_lock ? > hmm, will fix this. >> kfree(channel->name); >> kfree(channel); >> } >> @@ -423,6 +452,130 @@ static void qcom_glink_receive_version_ack(struct qcom_glink *glink, >> } >> } >> +/** >> + * qcom_glink_send_intent_req_ack() - convert an rx intent request ack cmd to >> + wire format and transmit >> + * @glink: The transport to transmit on. >> + * @channel: The glink channel >> + * @granted: The request response to encode. >> + * >> + * Return: 0 on success or standard Linux error code. >> + */ >> +static int qcom_glink_send_intent_req_ack(struct qcom_glink *glink, >> + struct glink_channel *channel, >> + bool granted) >> +{ >> + struct glink_msg msg; >> + >> + msg.cmd = cpu_to_le16(RPM_CMD_RX_INTENT_REQ_ACK); >> + msg.param1 = cpu_to_le16(channel->lcid); >> + msg.param2 = cpu_to_le32(granted); >> + >> + qcom_glink_tx(glink, &msg, sizeof(msg), NULL, 0, true); >> + >> + return 0; >> +} >> + >> +/** >> + * tx_cmd_local_rx_intent() - convert an rx intent cmd to wire format and >> + * transmit > > copy-paste mistake ok. >> + * @glink: The transport to transmit on. >> + * @channel: The local channel >> + * @size: The intent to pass on to remote. >> + * >> + * Return: 0 on success or standard Linux error code. >> + */ >> +static int qcom_glink_advertise_intent(struct qcom_glink *glink, >> + struct glink_channel *channel, >> + struct glink_core_rx_intent *intent) >> +{ >> + struct command { >> + u16 id; >> + u16 lcid; >> + u32 count; >> + u32 size; >> + u32 liid; >> + } __packed; >> + struct command cmd; >> + >> + cmd.id = cpu_to_le16(RPM_CMD_INTENT); >> + cmd.lcid = cpu_to_le16(channel->lcid); >> + cmd.count = cpu_to_le32(1); >> + cmd.size = cpu_to_le32(intent->size); >> + cmd.liid = cpu_to_le32(intent->id); >> + >> + qcom_glink_tx(glink, &cmd, sizeof(cmd), NULL, 0, true); >> + >> + return 0; >> +} >> + >> +static struct glink_core_rx_intent * >> +qcom_glink_alloc_intent(struct qcom_glink *glink, >> + struct glink_channel *channel, >> + size_t size, >> + bool reuseable) >> +{ >> + struct glink_core_rx_intent *intent; >> + int ret; >> + unsigned long flags; >> + >> + intent = kzalloc(sizeof(*intent), GFP_KERNEL); >> + >> + if (!intent) >> + return NULL; >> + >> + intent->data = kzalloc(size, GFP_KERNEL); >> + if (!intent->data) >> + return NULL; >> + >> + spin_lock_irqsave(&channel->intent_lock, flags); >> + ret = idr_alloc_cyclic(&channel->liids, intent, 1, -1, GFP_ATOMIC); >> + if (ret < 0) { >> + spin_unlock_irqrestore(&channel->intent_lock, flags); >> + return NULL; >> + } >> + spin_unlock_irqrestore(&channel->intent_lock, flags); >> + >> + intent->id = ret; >> + intent->size = size; >> + intent->reuse = reuseable; >> + >> + return intent; >> +} >> + >> +/** >> + * glink_core_rx_cmd_remote_rx_intent_req() - Receive a request for rx_intent >> + * from remote side > > copy-paste mistake ok. Regards, Sricharan -- "QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus -- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html