lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <89168ba0-a8ac-b433-3f93-412b22a9bc1a@sholland.org>
Date:   Fri, 14 Feb 2020 21:48:47 -0600
From:   Samuel Holland <samuel@...lland.org>
To:     Jassi Brar <jassisinghbrar@...il.com>
Cc:     Maxime Ripard <mripard@...nel.org>, Chen-Yu Tsai <wens@...e.org>,
        Rob Herring <robh+dt@...nel.org>,
        Mark Rutland <mark.rutland@....com>,
        Philipp Zabel <p.zabel@...gutronix.de>,
        Ondrej Jirman <megous@...ous.com>,
        Vasily Khoruzhick <anarsoul@...il.com>,
        Devicetree List <devicetree@...r.kernel.org>,
        linux-arm-kernel <linux-arm-kernel@...ts.infradead.org>,
        Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
        linux-sunxi@...glegroups.com
Subject: Re: [PATCH v6 2/6] mailbox: sun6i-msgbox: Add a new mailbox driver

On 2/12/20 8:18 PM, Samuel Holland wrote:
> Jassi,
> 
> On 2/12/20 8:02 PM, Jassi Brar wrote:
>> On Sun, Jan 12, 2020 at 11:18 PM Samuel Holland <samuel@...lland.org> wrote:
>>>
>>> +static int sun6i_msgbox_send_data(struct mbox_chan *chan, void *data)
>>> +{
>>> +       struct sun6i_msgbox *mbox = to_sun6i_msgbox(chan);
>>> +       int n = channel_number(chan);
>>> +       uint32_t msg = *(uint32_t *)data;
>>> +
>>> +       /* Using a channel backwards gets the hardware into a bad state. */
>>> +       if (WARN_ON_ONCE(!(readl(mbox->regs + CTRL_REG(n)) & CTRL_TX(n))))
>>> +               return 0;
>>> +
>>> +       /* We cannot post a new message if the FIFO is full. */
>>> +       if (readl(mbox->regs + FIFO_STAT_REG(n)) & FIFO_STAT_MASK) {
>>> +               mbox_dbg(mbox, "Channel %d busy sending 0x%08x\n", n, msg);
>>> +               return -EBUSY;
>>> +       }
>>> +
>> This check should go into sun6i_msgbox_last_tx_done().
>> send_data() assumes all is clear to send next packet.
> 
> sun6i_msgbox_last_tx_done() already checks that the FIFO is completely empty (as
> the big comment explains). So this error could only be hit in the knows_txdone
> == true case, if the client pipelines multiple messages by calling
> mbox_client_txdone() before the message is actually removed from the FIFO.
> 
> From the comments in mailbox_controller.h, this kind of usage looks to be
> unsupported. In that case, I could remove the check entirely. Does that sound right?

After more thought, I would prefer to keep the check. It is fast/simple, and it
keeps the hardware from getting into an inconsistent state. Silently dropping
messages sounds like a poor quality of implementation.

send_data() is documented in mailbox_controller.h as returning EBUSY, and I see
multiple other mailbox controllers implementing the same or a similar check. If
that is not the way you intend for the API to work, then please update the
comments in mailbox_controller.h.

Thanks,
Samuel

>> .....
>>> +
>>> +       mbox->controller.dev           = dev;
>>> +       mbox->controller.ops           = &sun6i_msgbox_chan_ops;
>>> +       mbox->controller.chans         = chans;
>>> +       mbox->controller.num_chans     = NUM_CHANS;
>>> +       mbox->controller.txdone_irq    = false;
>>> +       mbox->controller.txdone_poll   = true;
>>> +       mbox->controller.txpoll_period = 5;
>>> +
>> nit:  just a single space should do too.
>>
>> Sorry, for some reason I thought I had replied to this patch, but
>> apparently not. My mistake. Do you want to revise this submission or
>> send another patch on top?
> 
> For just this change, it would be simpler to send a follow-up patch.
> 
>> thanks
> 
> Thank you,
> Samuel
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ