lkml.org 
[lkml]   [2015]   [Apr]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH 1/4] mailbox: add support for System Control and Power Interface(SCPI) protocol
    From
    Date
    On Wed, 2015-04-29 at 13:25 +0100, Jon Medhurst (Tixy) wrote:
    > diff --git a/drivers/mailbox/scpi_protocol.c
    > b/drivers/mailbox/scpi_protocol.c
    > index c74575b..5818d9b 100644
    > --- a/drivers/mailbox/scpi_protocol.c
    > +++ b/drivers/mailbox/scpi_protocol.c
    > @@ -286,14 +286,23 @@ static void scpi_tx_prepare(struct mbox_client
    > *c, void *msg)
    > struct scpi_chan *ch = container_of(c, struct scpi_chan, cl);
    > struct scpi_shared_mem *mem = (struct scpi_shared_mem
    > *)ch->tx_payload;
    >
    > - mem->command = cpu_to_le32(t->cmd);
    > if (t->tx_buf)
    > memcpy_toio(mem->payload, t->tx_buf, t->tx_len);
    > if (t->rx_buf) {
    > + int token;
    > spin_lock_irqsave(&ch->rx_lock, flags);
    > + /*
    > + * Presumably we can do this token setting outside
    > + * spinlock and still be safe from concurrency?
    > + */

    To answer my own question, yes, the four lines below can be moved up
    above the spin_lock_irqsave. Because we had better be safe from
    concurrency here as we are also writing to the channel's shared memory
    area.

    > + do
    > + token = (++ch->token) & CMD_TOKEN_ID_MASK;
    > + while(!token);
    > + t->cmd |= token << CMD_TOKEN_ID_SHIFT;
    > list_add_tail(&t->node, &ch->rx_pending);
    > spin_unlock_irqrestore(&ch->rx_lock, flags);
    > }
    > + mem->command = cpu_to_le32(t->cmd);
    > }
    >
    > static struct scpi_xfer *get_scpi_xfer(struct scpi_chan *ch)

    --
    Tixy



    \
     
     \ /
      Last update: 2015-04-30 11:01    [W:3.748 / U:0.244 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site