From: Simon Horman <horms@kernel•org>
To: Xabier Marquiegui <reibax@gmail•com>
Cc: netdev@vger•kernel.org, richardcochran@gmail•com,
chrony-dev@chrony•tuxfamily.org, mlichvar@redhat•com,
ntp-lists@mattcorallo•com, vinicius.gomes@intel•com,
alex.maftei@amd•com, davem@davemloft•net, rrameshbabu@nvidia•com,
shuah@kernel•org
Subject: Re: [PATCH net-next v3 2/3] ptp: support multiple timestamp event readers
Date: Sun, 1 Oct 2023 17:06:15 +0200 [thread overview]
Message-ID: <20231001150615.GP92317@kernel.org> (raw)
In-Reply-To: <20230928133544.3642650-3-reibax@gmail.com>
On Thu, Sep 28, 2023 at 03:35:43PM +0200, Xabier Marquiegui wrote:
> Use linked lists to create one event queue per open file. This enables
> simultaneous readers for timestamp event queues.
>
> Signed-off-by: Xabier Marquiegui <reibax@gmail•com>
> Suggested-by: Richard Cochran <richardcochran@gmail•com>
Hi Xabier,
some minor feedback from Smatch via myself follows.
> diff --git a/drivers/ptp/ptp_chardev.c b/drivers/ptp/ptp_chardev.c
> index 197edf1179f1..65e7acaa40a9 100644
> --- a/drivers/ptp/ptp_chardev.c
> +++ b/drivers/ptp/ptp_chardev.c
> @@ -101,14 +101,74 @@ int ptp_set_pinfunc(struct ptp_clock *ptp, unsigned int pin,
> return 0;
> }
>
> -int ptp_open(struct posix_clock *pc, fmode_t fmode)
> +int ptp_open(struct posix_clock_user *pcuser, fmode_t fmode)
> {
> + struct ptp_clock *ptp =
> + container_of(pcuser->clk, struct ptp_clock, clock);
> + struct ida *ida = ptp_get_tsevq_ida(ptp);
> + struct timestamp_event_queue *queue;
> +
> + if (!ida)
> + return -EINVAL;
> + queue = kzalloc(sizeof(*queue), GFP_KERNEL);
> + if (!queue)
> + return -EINVAL;
> + queue->close_req = false;
> + queue->reader_pid = task_pid_nr(current);
> + spin_lock_init(&queue->lock);
> + queue->ida = ida;
> + queue->oid = ida_alloc(ida, GFP_KERNEL);
> + if (queue->oid < 0) {
> + kfree(queue);
queue is freed on the line above but dereferenced on the line below.
As flagged by Smatch.
> + return queue->oid;
> + }
> + list_add_tail(&queue->qlist, &ptp->tsevqs);
> + pcuser->private_clkdata = queue;
> +
> return 0;
> }
...
> diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c
...
> @@ -243,15 +275,23 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
> ptp->devid = MKDEV(major, index);
> ptp->index = index;
> INIT_LIST_HEAD(&ptp->tsevqs);
> + INIT_LIST_HEAD(&ptp->closed_tsevqs);
> queue = kzalloc(sizeof(*queue), GFP_KERNEL);
> if (!queue)
> goto no_memory_queue;
> + queue->close_req = false;
> + queue->ida = kzalloc(sizeof(*queue->ida), GFP_KERNEL);
> + if (!queue->ida)
> + goto no_memory_queue;
It's not clear to me that queue isn't leaked here.
As flagged by Smatch.
> + ida_init(queue->ida);
> spin_lock_init(&queue->lock);
> list_add_tail(&queue->qlist, &ptp->tsevqs);
> - /* TODO - Transform or delete this mutex */
> - mutex_init(&ptp->tsevq_mux);
> + queue->oid = ida_alloc(queue->ida, GFP_KERNEL);
> + if (queue->oid < 0)
> + goto ida_err;
> mutex_init(&ptp->pincfg_mux);
> mutex_init(&ptp->n_vclocks_mux);
> + mutex_init(&ptp->close_mux);
> init_waitqueue_head(&ptp->tsev_wq);
>
> if (ptp->info->getcycles64 || ptp->info->getcyclesx64) {
> @@ -350,9 +390,10 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
> if (ptp->kworker)
> kthread_destroy_worker(ptp->kworker);
> kworker_err:
> - mutex_destroy(&ptp->tsevq_mux);
> mutex_destroy(&ptp->pincfg_mux);
> mutex_destroy(&ptp->n_vclocks_mux);
> + mutex_destroy(&ptp->close_mux);
> +ida_err:
> ptp_clean_queue_list(ptp);
> no_memory_queue:
> ida_free(&ptp_clocks_map, index);
...
next prev parent reply other threads:[~2023-10-01 15:06 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-28 13:35 [PATCH net-next v3 0/3] ptp: Support for multiple filtered timestamp event queue readers Xabier Marquiegui
2023-09-28 13:35 ` [PATCH net-next v3 1/3] ptp: Replace timestamp event queue with linked list Xabier Marquiegui
2023-09-30 21:44 ` Richard Cochran
2023-09-28 13:35 ` [PATCH net-next v3 2/3] ptp: support multiple timestamp event readers Xabier Marquiegui
2023-09-29 23:43 ` Vinicius Costa Gomes
2023-09-30 21:57 ` Richard Cochran
2023-09-30 22:05 ` Richard Cochran
2023-09-30 22:10 ` Richard Cochran
2023-10-01 15:06 ` Simon Horman [this message]
2023-09-28 13:35 ` [PATCH net-next v3 3/3] ptp: support event queue reader channel masks Xabier Marquiegui
2023-09-30 0:03 ` Vinicius Costa Gomes
2023-09-30 8:01 ` Xabier Marquiegui
2023-10-02 22:54 ` Vinicius Costa Gomes
2023-09-30 22:37 ` Richard Cochran
2023-10-01 15:12 ` Simon Horman
2023-10-01 18:51 ` Richard Cochran
2023-09-29 23:39 ` [PATCH net-next v3 0/3] ptp: Support for multiple filtered timestamp event queue readers Vinicius Costa Gomes
2023-09-30 21:38 ` Richard Cochran
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231001150615.GP92317@kernel.org \
--to=horms@kernel$(echo .)org \
--cc=alex.maftei@amd$(echo .)com \
--cc=chrony-dev@chrony$(echo .)tuxfamily.org \
--cc=davem@davemloft$(echo .)net \
--cc=mlichvar@redhat$(echo .)com \
--cc=netdev@vger$(echo .)kernel.org \
--cc=ntp-lists@mattcorallo$(echo .)com \
--cc=reibax@gmail$(echo .)com \
--cc=richardcochran@gmail$(echo .)com \
--cc=rrameshbabu@nvidia$(echo .)com \
--cc=shuah@kernel$(echo .)org \
--cc=vinicius.gomes@intel$(echo .)com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox