From patchwork Sat Jul 2 08:57:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bhaktipriya Shridhar X-Patchwork-Id: 9210767 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 A79E0607D6 for ; Sat, 2 Jul 2016 08:57:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9509228545 for ; Sat, 2 Jul 2016 08:57:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 87158285E6; Sat, 2 Jul 2016 08:57:12 +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=-6.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID 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 1776728545 for ; Sat, 2 Jul 2016 08:57:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750939AbcGBI5L (ORCPT ); Sat, 2 Jul 2016 04:57:11 -0400 Received: from mail-pa0-f66.google.com ([209.85.220.66]:35954 "EHLO mail-pa0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750815AbcGBI5K (ORCPT ); Sat, 2 Jul 2016 04:57:10 -0400 Received: by mail-pa0-f66.google.com with SMTP id lm4so327246pab.3; Sat, 02 Jul 2016 01:57:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:mime-version:content-disposition :user-agent; bh=peBTITk1Gj1G0BL/N/ofNSjOyh9g7Wg0IPPh9Hl2P0g=; b=wz+qA5OcYG1id1nVeML8zTh7jFEzQInEaUPKayjlm7RHvbOKQo3vImLHe5xgFYCpBP os0L8dpAPeONwJI+38Ldno98IRWtGQO/i/KvIm93Wuj2RrVRatdPxmtGR1V27R0Wis1Z EMg3QQRTCo44sa1V4QLg+8KunYJzrB2p3a2PeSnx6MGtgJHrZQHNDytI1O0jwyHGMxgm ekehGaaDpUzUj32nfdBtHzf+T71Mk1l88SjRg6NpxX4RRFb0azAhXlTV8ZLAo4YMI+23 Pd8ICp/fb/FtcvhfR5mAS3nqCuO8Krkg5lWpWJqLpcupfYyWFu8OoIKO62uJocvtYG3u e9cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition:user-agent; bh=peBTITk1Gj1G0BL/N/ofNSjOyh9g7Wg0IPPh9Hl2P0g=; b=cPJhDS7gHHDczt0mLFqqDsRCV/XYolyAu20+giQgsUqLY1gNYnP/r1kSLazSr2zsmX c4mYsKVRUlfNAoLlmi03yXapxTUvEBvndWHusQKj6Jt04E8iClxJtV4CEOJEYW20QJfB j4T5PPubWF6lvYxSqA/ExxYKLcNx+uVcrzM9s3zkncmVqDnbzZYRgR8ypAQO/kcLRYm3 /Ay0cZ98cMuSrAj4kEADfX0pKsmOP6S6sTYdf5WciHmYvkKsdYzElKg0YjGAoU5qOVR1 +T3yZyK+i5gNtCC7J77PPT5PGX2Qfw48n27KiexS8j7naa1CaJoUNDALPbHlqqiuYZPq eeRw== X-Gm-Message-State: ALyK8tJfMonRRNw5JAuJqr3TVaaB7r/KT7sm76FzmdfNysKh3/b5fDp6530seGa9JXHdoQ== X-Received: by 10.66.118.169 with SMTP id kn9mr4330433pab.109.1467449829097; Sat, 02 Jul 2016 01:57:09 -0700 (PDT) Received: from Karyakshetra ([2401:fa00:c:fd01:410d:2f25:536:9c8f]) by smtp.gmail.com with ESMTPSA id o68sm3347199pfb.18.2016.07.02.01.57.08 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 02 Jul 2016 01:57:08 -0700 (PDT) Date: Sat, 2 Jul 2016 14:27:06 +0530 From: Bhaktipriya Shridhar To: Mark Brown Cc: Tejun Heo , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] spi: spi-mpc52xx-psc: Remove deprecated create_singlethread_workqueue Message-ID: <20160702085706.GA28703@Karyakshetra> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The workqueue "workqueue" has a single work item(&mps->work) doesn't require ordering. Also, it is not being used on a memory reclaim path. Hence, the singlethreaded workqueue has been replaced with the use of system_wq. System workqueues have been able to handle high level of concurrency for a long time now and hence it's not required to have a singlethreaded workqueue just to gain concurrency. Unlike a dedicated per-cpu workqueue created with create_singlethread_workqueue(), system_wq allows multiple work items to overlap executions even on the same CPU; however, a per-cpu workqueue doesn't have any CPU locality or global ordering guarantee unless the target CPU is explicitly specified and thus the increase of local concurrency shouldn't make any difference. Work item has been flushed in mpc52xx_psc_spi_of_remove() to ensure that nothing is pending while disconnecting the driver. Signed-off-by: Bhaktipriya Shridhar Acked-by: Tejun Heo --- drivers/spi/spi-mpc52xx-psc.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/spi/spi-mpc52xx-psc.c b/drivers/spi/spi-mpc52xx-psc.c index 72d11eb..42a8b85 100644 --- a/drivers/spi/spi-mpc52xx-psc.c +++ b/drivers/spi/spi-mpc52xx-psc.c @@ -42,7 +42,6 @@ struct mpc52xx_psc_spi { u8 bits_per_word; u8 busy; - struct workqueue_struct *workqueue; struct work_struct work; struct list_head queue; @@ -299,7 +298,7 @@ static int mpc52xx_psc_spi_transfer(struct spi_device *spi, spin_lock_irqsave(&mps->lock, flags); list_add_tail(&m->queue, &mps->queue); - queue_work(mps->workqueue, &mps->work); + schedule_work(&mps->work); spin_unlock_irqrestore(&mps->lock, flags); return 0; @@ -425,21 +424,12 @@ static int mpc52xx_psc_spi_do_probe(struct device *dev, u32 regaddr, INIT_WORK(&mps->work, mpc52xx_psc_spi_work); INIT_LIST_HEAD(&mps->queue); - mps->workqueue = create_singlethread_workqueue( - dev_name(master->dev.parent)); - if (mps->workqueue == NULL) { - ret = -EBUSY; - goto free_irq; - } - ret = spi_register_master(master); if (ret < 0) - goto unreg_master; + goto free_irq; return ret; -unreg_master: - destroy_workqueue(mps->workqueue); free_irq: free_irq(mps->irq, mps); free_master: @@ -484,8 +474,7 @@ static int mpc52xx_psc_spi_of_remove(struct platform_device *op) struct spi_master *master = spi_master_get(platform_get_drvdata(op)); struct mpc52xx_psc_spi *mps = spi_master_get_devdata(master); - flush_workqueue(mps->workqueue); - destroy_workqueue(mps->workqueue); + flush_work(&mps->work); spi_unregister_master(master); free_irq(mps->irq, mps); if (mps->psc)