From mboxrd@z Thu Jan 1 00:00:00 1970 From: timur@codeaurora.org (Timur Tabi) Date: Fri, 22 Jun 2018 10:41:11 -0500 Subject: [PATCH 1/2] hwrng: msm: add a spinlock and support for blocking reads In-Reply-To: References: <1529594276-12210-1-git-send-email-timur@codeaurora.org> Message-ID: <6d655b97-418e-bacf-7e88-b9179cdc6fd1@codeaurora.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 6/22/18 10:38 AM, Stanimir Varbanov wrote: > Before entering into the read function we already hold a mutex which > serializes data reading so I cannot imagine how below sequence could > happen. Can you explain how to reproduce this race? > >> 1. Core 1 reads status register, shows data is available. >> 2. Core 2 also reads status register, same result >> 3. Core 2 reads data register, depleting all entropy >> 4. Core 1 reads data register, which returns 0 I have a test which spawns 100 copies of rngtest on a 48-core machine. Without the spinlock, the driver returns no data much more often. If there really is a mutex that serializes data reads across all cores, then I don't have an explanation. -- Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.