From: Greg KH <gregkh@linuxfoundation.org>
To: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Cc: jhugo@codeaurora.org, arnd@arndb.de, smohanad@codeaurora.org,
kvalo@codeaurora.org, bjorn.andersson@linaro.org,
hemantk@codeaurora.org, linux-arm-msm@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 02/16] bus: mhi: core: Add support for registering MHI controllers
Date: Mon, 27 Jan 2020 08:11:28 +0100 [thread overview]
Message-ID: <20200127071128.GA279449@kroah.com> (raw)
In-Reply-To: <20200127070252.GA4768@mani>
On Mon, Jan 27, 2020 at 12:32:52PM +0530, Manivannan Sadhasivam wrote:
> > > > + void __iomem *regs;
> > > > + dma_addr_t iova_start;
> > > > + dma_addr_t iova_stop;
> > > > + const char *fw_image;
> > > > + const char *edl_image;
> > > > + bool fbc_download;
> > > > + size_t sbl_size;
> > > > + size_t seg_len;
> > > > + u32 max_chan;
> > > > + struct mhi_chan *mhi_chan;
> > > > + struct list_head lpm_chans;
> > > > + u32 total_ev_rings;
> > > > + u32 hw_ev_rings;
> > > > + u32 sw_ev_rings;
> > > > + u32 nr_irqs_req;
> > > > + u32 nr_irqs;
> > > > + int *irq;
> > > > +
> > > > + struct mhi_event *mhi_event;
> > > > + struct mhi_cmd *mhi_cmd;
> > > > + struct mhi_ctxt *mhi_ctxt;
> > > > +
> > > > + u32 timeout_ms;
> > > > + struct mutex pm_mutex;
> > > > + bool pre_init;
> > > > + rwlock_t pm_lock;
> > > > + u32 pm_state;
> > > > + u32 db_access;
> > > > + enum mhi_ee_type ee;
> > > > + bool wake_set;
> > > > + atomic_t dev_wake;
> > > > + atomic_t alloc_size;
> > > > + atomic_t pending_pkts;
> > >
> > > Why a bunch of atomic variables when you already have a lock?
> > >
>
> So there are multiple locks used throughout the MHI stack and each one
> servers its own purpose. For instance, pm_lock protects againt the
> concurrent access to the PM state, transition_lock protects against the
> concurrent access to the state transition list, wlock protects against
> the concurrent access to device wake state. Since there are multiple
> worker threads and each trying to update these variables, we did the
> best to protect against the race condition by having all these locks.
>
> And there are these atomic variables which are again shared with the
> threads holding the above locks, precisely with threads holding read locks.
> So it becomes convenient to just use the atomic_ APIs to update these variables.
An atomic_ api is almost as heavy as a "normal" lock, so while you might
think it is convenient, it's odd that you feel it is needed. As an
example, "wake_set" and "dev_wake" look like they are happening at the
same time, yet one is going to be held with a lock and the other one
updated without one?
Anyway, I'll leave this alone, let's see what your next round looks
like...
greg k-h
next prev parent reply other threads:[~2020-01-27 7:11 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-23 11:18 [PATCH 00/16] Add MHI bus support Manivannan Sadhasivam
2020-01-23 11:18 ` [PATCH 01/16] docs: Add documentation for MHI bus Manivannan Sadhasivam
2020-01-23 12:58 ` Arnd Bergmann
2020-01-23 13:10 ` Manivannan Sadhasivam
2020-01-23 13:19 ` Arnd Bergmann
2020-01-23 13:30 ` Manivannan Sadhasivam
2020-01-23 14:52 ` Jeffrey Hugo
2020-01-23 16:41 ` Jeffrey Hugo
2020-01-27 12:02 ` Manivannan Sadhasivam
2020-01-23 11:18 ` [PATCH 02/16] bus: mhi: core: Add support for registering MHI controllers Manivannan Sadhasivam
2020-01-23 11:33 ` Greg KH
2020-01-23 11:56 ` Manivannan Sadhasivam
2020-01-23 17:05 ` Jeffrey Hugo
2020-01-23 18:14 ` Greg KH
2020-01-26 23:58 ` Jeffrey Hugo
2020-01-28 7:19 ` Manivannan Sadhasivam
2020-01-27 11:56 ` Manivannan Sadhasivam
2020-01-27 14:52 ` Jeffrey Hugo
2020-01-28 6:37 ` Manivannan Sadhasivam
2020-01-28 7:24 ` Greg KH
2020-01-28 7:27 ` Manivannan Sadhasivam
2020-01-24 8:29 ` Greg KH
2020-01-24 14:24 ` Jeffrey Hugo
2020-01-24 17:47 ` Greg KH
2020-01-24 18:12 ` Jeffrey Hugo
2020-01-25 13:26 ` Greg KH
2020-01-26 21:00 ` Jeffrey Hugo
2020-01-27 7:02 ` Manivannan Sadhasivam
2020-01-27 7:11 ` Greg KH [this message]
2020-01-23 11:18 ` [PATCH 03/16] bus: mhi: core: Add support for registering MHI client drivers Manivannan Sadhasivam
2020-01-23 11:18 ` [PATCH 04/16] bus: mhi: core: Add support for creating and destroying MHI devices Manivannan Sadhasivam
2020-01-23 11:18 ` [PATCH 05/16] bus: mhi: core: Add support for ringing channel/event ring doorbells Manivannan Sadhasivam
2020-01-23 11:39 ` Arnd Bergmann
2020-01-23 12:00 ` Manivannan Sadhasivam
2020-01-23 12:44 ` Arnd Bergmann
2020-01-23 13:01 ` Manivannan Sadhasivam
2020-01-23 14:44 ` Jeffrey Hugo
2020-01-24 22:51 ` Jeffrey Hugo
2020-01-25 13:46 ` Greg KH
2020-01-27 7:10 ` Manivannan Sadhasivam
2020-01-27 7:21 ` Greg KH
2020-01-23 11:18 ` [PATCH 06/16] bus: mhi: core: Add support for PM state transitions Manivannan Sadhasivam
2020-01-23 11:18 ` [PATCH 07/16] bus: mhi: core: Add support for basic PM operations Manivannan Sadhasivam
2020-01-23 11:18 ` [PATCH 08/16] bus: mhi: core: Add support for downloading firmware over BHIe Manivannan Sadhasivam
2020-01-28 19:36 ` Jeffrey Hugo
2020-01-29 6:56 ` Manivannan Sadhasivam
2020-01-23 11:18 ` [PATCH 09/16] bus: mhi: core: Add support for downloading RDDM image during panic Manivannan Sadhasivam
2020-01-23 11:18 ` [PATCH 10/16] bus: mhi: core: Add support for processing events from client device Manivannan Sadhasivam
2020-01-23 11:18 ` [PATCH 11/16] bus: mhi: core: Add support for data transfer Manivannan Sadhasivam
2020-01-23 11:18 ` [PATCH 12/16] bus: mhi: core: Add uevent support for module autoloading Manivannan Sadhasivam
2020-01-23 11:18 ` [PATCH 13/16] MAINTAINERS: Add entry for MHI bus Manivannan Sadhasivam
2020-01-23 11:18 ` [PATCH 14/16] net: qrtr: Add MHI transport layer Manivannan Sadhasivam
2020-01-23 11:18 ` [PATCH 15/16] net: qrtr: Do not depend on ARCH_QCOM Manivannan Sadhasivam
2020-01-23 11:18 ` [PATCH 16/16] soc: qcom: Do not depend on ARCH_QCOM for QMI helpers Manivannan Sadhasivam
2020-01-23 11:45 ` Arnd Bergmann
2020-01-23 12:03 ` Manivannan Sadhasivam
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=20200127071128.GA279449@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=arnd@arndb.de \
--cc=bjorn.andersson@linaro.org \
--cc=hemantk@codeaurora.org \
--cc=jhugo@codeaurora.org \
--cc=kvalo@codeaurora.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=manivannan.sadhasivam@linaro.org \
--cc=smohanad@codeaurora.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.