From patchwork Wed May 16 13:32:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Mack X-Patchwork-Id: 10403951 X-Patchwork-Delegate: sameo@linux.intel.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 9AE0E60155 for ; Wed, 16 May 2018 13:33:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5F43B2894C for ; Wed, 16 May 2018 13:33:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C83C4289B0; Wed, 16 May 2018 13:33:55 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 708BA289FA for ; Wed, 16 May 2018 13:32:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752604AbeEPNc4 (ORCPT ); Wed, 16 May 2018 09:32:56 -0400 Received: from mail.bugwerft.de ([46.23.86.59]:35182 "EHLO mail.bugwerft.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752584AbeEPNcy (ORCPT ); Wed, 16 May 2018 09:32:54 -0400 Received: from localhost.localdomain (200116b8467d0800fc4322f50d1cf4c2.dip.versatel-1u1.de [IPv6:2001:16b8:467d:800:fc43:22f5:d1c:f4c2]) by mail.bugwerft.de (Postfix) with ESMTPSA id DBC81282596; Wed, 16 May 2018 13:30:26 +0000 (UTC) From: Daniel Mack To: sameo@linux.intel.com, davem@davemloft.net Cc: linux-wireless@vger.kernel.org, Daniel Mack Subject: [PATCH 1/2] NFC: st95hf: initialize semaphore and mutex earlier Date: Wed, 16 May 2018 15:32:46 +0200 Message-Id: <20180516133247.25986-1-daniel@zonque.org> X-Mailer: git-send-email 2.14.3 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 'rm_lock' and 'exchange_lock' need to be ready before the IRQ handler has a chance to fire. This fixes the oops below. [ 1.040255] Internal error: Oops: 96000004 [#1] PREEMPT SMP [...] [ 1.181564] Call trace: [ 1.188591] Exception stack(0xffff00000a473c40 to 0xffff00000a473d80) [ 1.190943] 3c40: ffff80003673b118 0000000000000000 ffff800036374380 0000000000000000 [ 1.197542] 3c60: 0000000000000000 0000000000000000 00000000044b2ac5 0000000000000001 [ 1.205354] 3c80: ffff800036374d60 ffff00000a473d70 0000000000000980 0000000000000000 [ 1.213166] 3ca0: 0000000000000001 0000000000000000 000000000000004c 0000000000000033 [ 1.217590] st95hf spi2.0: err: por seq failed for st95hf [ 1.228788] 3cc0: 0000000000000019 0000000000000001 0000000000000007 ffff80003673b118 [ 1.234175] 3ce0: ffff800009f27000 0000000000000000 ffff80003673b1c8 ffff80003673b1b0 [ 1.241986] 3d00: ffff0000080f0000 ffff800009f716a4 ffff00000894bb40 0000000000000000 [ 1.249800] 3d20: 0000000000000000 ffff00000a473d80 ffff0000084268c0 ffff00000a473d80 [ 1.257611] 3d40: ffff0000084268c4 0000000040000005 ffff00000a473d60 ffff0000080e5688 [ 1.265424] 3d60: ffffffffffffffff ffff0000084268a4 ffff00000a473d80 ffff0000084268c4 [ 1.273239] [] st95hf_irq_thread_handler+0x44/0x3a0 [ 1.281048] [] irq_thread_fn+0x28/0x68 [ 1.287468] [] irq_thread+0x10c/0x1a0 [ 1.292850] [] kthread+0x12c/0x130 [ 1.297799] [] ret_from_fork+0x10/0x18 [ 1.303008] Code: aa1603e0 f9403675 940d010f aa1303e0 (f94066a1) [ 1.308307] ---[ end trace d058c1b88aad74d8 ]--- Signed-off-by: Daniel Mack --- drivers/nfc/st95hf/core.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/nfc/st95hf/core.c b/drivers/nfc/st95hf/core.c index 2b26f762fbc3..394bdc7b0cf2 100644 --- a/drivers/nfc/st95hf/core.c +++ b/drivers/nfc/st95hf/core.c @@ -1112,8 +1112,10 @@ static int st95hf_probe(struct spi_device *nfc_spi_dev) } } + sema_init(&st95context->exchange_lock, 1); init_completion(&spicontext->done); mutex_init(&spicontext->spi_lock); + mutex_init(&st95context->rm_lock); /* * Store spicontext in spi device object for using it in @@ -1197,9 +1199,6 @@ static int st95hf_probe(struct spi_device *nfc_spi_dev) /* store st95context in nfc device object */ nfc_digital_set_drvdata(st95context->ddev, st95context); - sema_init(&st95context->exchange_lock, 1); - mutex_init(&st95context->rm_lock); - return ret; err_free_digital_device: