Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S967232AbdCXTcf (ORCPT ); Fri, 24 Mar 2017 15:32:35 -0400 Received: from mail-by2nam01on0082.outbound.protection.outlook.com ([104.47.34.82]:33856 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S967067AbdCXTaH (ORCPT ); Fri, 24 Mar 2017 15:30:07 -0400 Authentication-Results: spf=pass (sender IP is 149.199.60.83) smtp.mailfrom=xilinx.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=bestguesspass action=none header.from=xilinx.com; From: Wendy Liang To: CC: , , "Wendy Liang" , Wendy Liang , Michal Simek Subject: [RFC LINUX PATCH 12/19] remoteproc: use rproc_id_rsc for data got from idr_find() Date: Fri, 24 Mar 2017 12:22:28 -0700 Message-ID: <1490383355-23176-13-git-send-email-jliang@xilinx.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1490383355-23176-1-git-send-email-jliang@xilinx.com> References: <1490383355-23176-1-git-send-email-jliang@xilinx.com> X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.1.0.1062-22962.005 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.60.83;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(39450400003)(39850400002)(39860400002)(39840400002)(39410400002)(2980300002)(438002)(189002)(199003)(9170700003)(77096006)(6666003)(9786002)(4326008)(76176999)(50986999)(36756003)(54906002)(33646002)(2351001)(110136004)(107886003)(38730400002)(356003)(106466001)(47776003)(305945005)(36386004)(8936002)(5003940100001)(6916009)(81166006)(5660300001)(48376002)(50466002)(8676002)(189998001)(50226002)(2950100002)(2906002)(107986001)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:BN1PR0201MB0753;H:xsj-pvapsmtpgw01;FPR:;SPF:Pass;MLV:sfv;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;SN1NAM02FT025;1:ObtgXd4EFMfdepVGtfy3Sc1JzpY1DBN+iKIsi6yeL9nVRNv/N92kh8kQnUo36he7IZ5e/ZGHo7EpEpK/Nz3wDyfi8Jy7AkZ1x0Fv/3MUcAuu93ac9YzGPaBOqZLp7gr7Q8TELDUEucUE/w29vT9ITWeUXZXKdG2EVcPrFSZ48KsojyNYFk/o1KFrOjiNIdmbE7UNC/2vhwatXjH8jDePxkH+JtniCI0KkN5CnWDo5l/eIPgKdaniti5CAVacZJT8LEmxJq6GoMk3wB+fJ/DTPwwXhLXiSdBwao73xsseCdbIWIDx32gfx/pl0bW8i0phTYmh+tDLbd1oiNGLf3WDrsYeFj58ZOljjchyWy7PdmIEE+ljqPuludJTiaqzNmpfIjo8VNqFWdTXHEn8kwDBTbJwZnFl2zOT1vSh0X1H7Lui7t5J99io+EiZO7/TdTRLpLrnMNnZkSVWpqWXxVj2Aek4V/wDGGvbtVIyXygtoIoC/TmAuW8a0wLVQ3dHXsaC6bRHaY6F/ftxXq+zUwlJCTVfRZp6HB8QRPTHMKOe2wvT96owa7BuCE+PAtNvYznV/g570VHpH1WLbMT0eNCjYA== MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: e1aa3e72-38a9-4b74-7e4c-08d472ec2912 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(8251501002)(2017030254075);SRVR:BN1PR0201MB0753; X-Microsoft-Exchange-Diagnostics: 1;BN1PR0201MB0753;3:3H4NvJgr+8/3xJ5bmRRJv2tAhhjNUP9HRrgG7emZFGyyWCgmBHh0m6SMpH5OyP1bwat5GCdEqXkG36nrDiLtpaLb+CQ7BDDo+WxTRmsCqsO1scsULbWLOqaANPU3I4TgJ9ZcsQyJTJnBjsx0IR5xqan1r/12+pJLvEe58eB5v2lnIFmXtdR8iNvPYlKYl+RJ+IR1GxsIRPQezNeahvctzyIKsr3X4cxW3oqQtCRpkVWyV7lGh1jqVqLxJqA5TeYn6aGoi8vLgZ0uZBnnnrq2Prx+NE3y7GWyaGOh1Ti9hgl1qaN7g1oXmi2b1StLjSnhYmhBhjyZ4Il/dm8N20mNLXX+aieT+BeE4LpbE8fIRnDKeNv3xFPDnw/rjO7Zg9TiyriF9h+BLCpcATJkEUw3y1NF1UjkGl48sWPM8ALj0/0=;25:GPt2lEp6uBA2cdgL4edgoqBZAJ6xMHm1CVRjXxuQYz2GjH83l9F7A3ZGlkC8mT587yhRYDoqlLuc+Hxp6pPfVuxnoD52jY7Lgy44qnSxdZlRt28Swwq2tTfKEOGDLX1kZ3rpLUhsEeVU6H46BRhavdSFu2r1o1fdMv4H61LRoMKMDYXKb4MGFq2lXn1g6NzWF9uIBxTSoZwFavJR8/HwnaGU0oiwnauQZ8ZRmiztOJkzAL1x9jA5BpomG0F5HsbdDX1saVwmKJH2B8fLQ7B4OY/lkcS4N0I+qpryoQpeP8175ubGIbUsEWXirr0cZHz3gWA7y1nBPSUr7qu/qfKsdCBLo8rV2SX3qiJRfMGrAy91lgHfAivgZWNmiv3v2UwO3DoGywN4Za62nLKnhR3ZoBoWBOMy5B6xSjUTlEKOVgkWdXS7Y1JESFTymevdJgVIh1l36WHz5d2Rwj4OjqF5MQ== X-Microsoft-Exchange-Diagnostics: 1;BN1PR0201MB0753;31:IxMCNhtisNBUT6TdNb0bCMvstvgReNjoyNxN3sphx9RUSlzK1biSKGKp8H4Q0/FRkjY0mK954YsdD2vtHVBN/KLDeEY5MmMyDJ626eiu5/OZiDayiXU7vL7HgttWlyilxAML7W+VUgixZu9bpXedKV/n8VdRDphnh4Zd+Xi6h2Hta0tE9DL3EilNE+OLfSL/3uN0sa10qRpXC0tFncu+KVtojBZWwKKLvqpsN6Fmuuus5sNA9KWONNTNsku/PpBD;20:GHaqGeIqeU7RlycRsX8sBRj7oWnSc7F1FbE0MPlIT5Gs65ybEm7mOc8caLMknAFhksrDKuFv9EKt+n8gXj9I3PcPmbuiWdlovZJfkMtM9yrg4Wj4YcQBCWUvV9UuMFoKEyyAUx6HZ7F9cB7xWejtb/nx1H4XmptS3hdGcifpEpcN1iogirbcZQZopjrkEaO7l774pxhdEJkjSeQlOasPQoG2Urcth3PyyX8/VXbqe0c8BBU79g/PlLjIAJHQK6MKOXW0rfxygVs05Mc8e2stZK0CTQx8vzWqB5DeceBRyTQrqyY/1fmwGQPWaDouZufsz8OlSJ6NlOe7L1FMaII5omjwIz3rt113hBmgAdrofXZxstI/rs6QmE2LjP0TPjdsGrk/CwoD46/xK8B/q70pCbAW4qen+vbqU5UY/4Onv92/XKN2sbhJ9P+PuK8tnJRiXss/NGyPQPdxZwwDm0Zj3pZTuBHSxJXZrAwe11IKc1Ubyf4Y6AV23+m1zN2K2wxC X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(13023025)(13018025)(13024025)(5005006)(13017025)(13015025)(3002001)(10201501046)(6055026)(6041248)(20161123558025)(20161123562025)(20161123560025)(20161123555025)(20161123564025)(6072148);SRVR:BN1PR0201MB0753;BCL:0;PCL:0;RULEID:;SRVR:BN1PR0201MB0753; X-Microsoft-Exchange-Diagnostics: 1;BN1PR0201MB0753;4:8Nf8tnPESz/gX5aaa16EpOWcPqY42tp1L/EkTZ5mTp9MaYfUxuG0MKhqPmODJEk+3PMz9oldV4DHNNUaQgoXPOW6V3RdaUp1i68S7Lno7tyZPrqxTOH7ktjgXaAxN5WX1asEp53iD5zxURRKGSR7sUbSo/Fq9IHoPM6YvJE3pwbeFPbYh3EFGlCbM/CNOq/VXQvwUM5HbMC7o/5X1ydUnx91FqfsISnuVDf03ddUrWhkVqHFEK0TRvoEFOF15Al9HftAXcs3zvHnTAoZRCSufS6ngHcyqGSCAoseyJM3H8uo5ihkQaoCzDaslT+knd1R5eyvwMQc2gN+Ys+OunqXhDS3s81k5Tqy4zpsNZZ3v7Zh+uwZ+anQy4CPYjd3P6l/XM26asHpeUI5OumKr7jXLaAZRi/iWxRO454KTUqjW5YIBttIQ5ZxHBtmwBqPqcYZOXXo2j/7jblfrV15/SAQqlLktQR05xQgotbQWgzxUxyJSJbBdDaBTdwIpnDCssQd5ujHIHD2zVc4d6ZpT1GCmv/O9i0zwNS12mY1YHmD98llGQkLZ2icQARJcfpo/SAtC0Rtyj2aGisDIMksO3/bREXY7SnWLz+PFT18he0cNJTOYI8pbCeGdLbA4IHm4JXQASj5x8rcv6ffC+Ow959hpSzvcStiYIAvMduANK+biNlohpI3wUxQqcQoSmpddeSJw1yexAb+Oz/e6QiUNLV8BwyLJ+UV7qbAruit3AJYYqmytsFRk/9JUxNlVaGiwh/Y X-Forefront-PRVS: 0256C18696 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN1PR0201MB0753;23:npAiJVt1Tv0VvssvQ+UUi/b8Rd+ZYU5n5SidsvZ?= =?us-ascii?Q?PhG9UDjybkxlf5Y2M4PC8IXuoqgPhdPEIjNqAAsdW6C6QqHZF2F+Gc1ucUjK?= =?us-ascii?Q?7Mt+4HxthpYFVQi5zzVoG0JcKW9RnpgeIsUGpdwQwYZAC6bQmKm1x4MmIiWN?= =?us-ascii?Q?cUXNRWM5ZYa+n+H5G88hkGrDEgRwQE5xhYDSkM7KNNAVeubreYBV58w45/7e?= =?us-ascii?Q?HjFyvgCsVC6GhvXrq1GudSBXikrDAONN0C7oq6vNILgIgoHYotDVBHy7cN4h?= =?us-ascii?Q?/qHv054T9nHTnAiwL7dfwgB/rOxh1iL/e7E93cDBwR5Zv/Z5d0RB6RDsYEyd?= =?us-ascii?Q?HcpNan+Ae5pBLYXBNNKM2Ig1E+qnNN3oGjOhcodyXqt2kxfrmedB2U4BOLo+?= =?us-ascii?Q?cKwXH7zuNVez93KQmLavWq3bni8i4kMPJNUYO2TI2aGeAuMCRcESCfrZnI6G?= =?us-ascii?Q?zW0DhkhSDKgpTujmdTdJxRj4btKtmexn+YEn8nVKczoStgpK5E/hop/Cy7k+?= =?us-ascii?Q?TiZuLbkvLEV/+oxWxAbEUGWSdQSin5QHpW2dek7xzlfzRNakyS6eJ9S0cDht?= =?us-ascii?Q?OxXNr2gCkAH1tN7yxVG5g9IYnGVkvrAYflIOlvGolhA1C2nQlXaXgMzquI97?= =?us-ascii?Q?W/4kij4OjDxDugKRmIlSDt8HmMl4/f4Tu6g5j8BsiiwiZ1btDP/ypCICRpp2?= =?us-ascii?Q?L9uT7N2o4bhxJ7Y+TgL6jirf8ozx/KbPB2s2NUpsM//WLKuY3Nja9XPoo4eq?= =?us-ascii?Q?+aLsIAPPRcEN52b33oESyNSeKbV9dQ4JgtnHjNC0+jYIUUihy5if4osGk/rJ?= =?us-ascii?Q?q+3gOP1twAmtDeKQeTN+T57BGiO5niuT50j1kUIz30H4VcealnPfSkZZ2I7f?= =?us-ascii?Q?YagkQkiAA7FmhfSntRFBDxywY06WFjUnkGy7SI4iecmB4piTWe40owBTg56x?= =?us-ascii?Q?HD4meM2fVuOe8+ojROPu5EoivHb9gvENGKK1hFW1GAAy7w2JpyF4d96GSWkP?= =?us-ascii?Q?WBG5BWRaGH7rRoV+8D5UF0XaR7Cnuy/I9sLa1DPVoshDC41360/lBBI4Ng9I?= =?us-ascii?Q?bQXLlISGbgP7FukeT+yyLTgzZ3LEv?= X-Microsoft-Exchange-Diagnostics: 1;BN1PR0201MB0753;6:jGdU8UrKQpDoP3c+VUcjlRx8b+NZRSfU7QmXhKEyluuQ+7FG2kxsGs9knfubVBhuhAWe57yGBDC88epfIoWhOHBFdyeUGWBf8jCtZ0+bf2/r2wTSshcOIbF9s80Wj63DGNRX3Yy1s56Tzi9yxJHIFZ3O0GXcrmuTO+DIE4o61BqNhLIit7bn4UqKTeGZyfXML+jA+M55hSmBvO2rdGL+fuEunl7nQ+FM7h6z7oMQJ7d8uwywnu6hvImXyFcxocZG+cUvr7+IYhmyYh17tjqGiLs2eQnQShcfB/ciCHjVbXfHurKx2cpXwVNXeauEEQKthyG/0e1NIqgYgPwdlABs25ex/fUGp6oT/RpQFEYHejmn9osx9855srOQCBrFzjbnrynBp/wupByq4fwRGf+Nug==;5:wQQDJJXsbE9MlOd5Pof7FdUW2kgOyW8HyZ3E3wWut6SGZ3AK/A7/mFhKkCfHF7WKosK03jMaYU76idaVBuxtS59etcKIc+IKqY7J8SaSRvBPxLFguPHrXN++Wf8AfsKkjVa3ePKmxZkzRrP6dIU64g==;24:a9i1UjKgwqfEK/sFElasM5I5LGILIIsQvle1EsIWpRgRKseaS6zEocLlrZjgy1IGknzjYeL2vVyLpuCXjZ0lAVVSPKG8+Q8vSEr+JBSUpGo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN1PR0201MB0753;7:6Sa4DPEsEQlxVOR6ocYlV20O/I0n/s5rAXCze8Kr6+QK30xAH2HIjEVR5OAfjQW5z2CHvOOOwW2YyecCyqXCcEXhjZETZGZmTutbrIPgTuWxepSHJfJVxt4EOfeTOyDP2CXpdEieyQ5+W9F1qM0l/VkujTa6jZ9MJrP8RZN/zvr2LqZX/yDRN5hEEfKu5icFAasmjFw+SgxK9qQ3eSJV4pFoz56i52ZwXXzFx21dQXeCUX979ajQWQR2fkNIYhLeHQI17g43Dvc/BX04HWOor3BSeK0cn/BAAoMKOxLK5qV7RcCslXVRJDypB2d+GvBMCj17lgjy+bbamSnlD9iC7w== X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2017 19:29:59.0821 (UTC) X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c;Ip=[149.199.60.83];Helo=[xsj-pvapsmtpgw01] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1PR0201MB0753 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4806 Lines: 122 From: Wendy Liang As not just rproc_vring can have notifyid, rproc uses rproc_id_rsc for the resource which has notifyid. And thus, the data got from idr_find() can be something else rather than rproc_vring. And thus, add the virtio_interrupt() to handle interrupt not just for vrings, and change the existing vq_interrupt() to call virtio_interrupt(). Signed-off-by: Wendy Liang Signed-off-by: Michal Simek --- drivers/remoteproc/remoteproc_core.c | 7 +++--- drivers/remoteproc/remoteproc_internal.h | 1 + drivers/remoteproc/remoteproc_virtio.c | 42 +++++++++++++++++++++++++++----- 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c index d711345..ffd1de2 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -274,7 +274,7 @@ int rproc_alloc_vring(struct rproc_vdev *rvdev, int i) * TODO: assign a notifyid for rvdev updates as well * TODO: support predefined notifyids (via resource table) */ - ret = idr_alloc(&rproc->notifyids, rvring, 0, 0, GFP_KERNEL); + ret = rproc_idr_alloc(rproc, rvring, RPROC_IDR_VRING, 0, 0); if (ret < 0) { dev_err(dev, "idr_alloc failed: %d\n", ret); dma_free_coherent(dev->parent, size, va, dma); @@ -337,8 +337,9 @@ void rproc_free_vring(struct rproc_vring *rvring) int idx = rvring->rvdev->vring - rvring; struct fw_rsc_vdev *rsc; - dma_free_coherent(rproc->dev.parent, size, rvring->va, rvring->dma); - idr_remove(&rproc->notifyids, rvring->notifyid); + dma_free_coherent(rproc->dev.parent, size, rvring->va, + rvring->dma); + rproc_idr_remove(rproc, rvring->notifyid); /* reset resource entry info */ rsc = (void *)rproc->table_ptr + rvring->rvdev->rsc_offset; diff --git a/drivers/remoteproc/remoteproc_internal.h b/drivers/remoteproc/remoteproc_internal.h index 865bd1c..0cfc942 100644 --- a/drivers/remoteproc/remoteproc_internal.h +++ b/drivers/remoteproc/remoteproc_internal.h @@ -72,6 +72,7 @@ struct rproc_fw_ops { /* from remoteproc_core.c */ void rproc_release(struct kref *kref); +irqreturn_t rproc_virtio_interrupt(struct rproc *rproc, int notifyid); irqreturn_t rproc_vq_interrupt(struct rproc *rproc, int vq_id); int rproc_boot_nowait(struct rproc *rproc); void rproc_vdev_release(struct kref *ref); diff --git a/drivers/remoteproc/remoteproc_virtio.c b/drivers/remoteproc/remoteproc_virtio.c index 0142cc3..e45e17b 100644 --- a/drivers/remoteproc/remoteproc_virtio.c +++ b/drivers/remoteproc/remoteproc_virtio.c @@ -43,7 +43,7 @@ static bool rproc_virtio_notify(struct virtqueue *vq) } /** - * rproc_vq_interrupt() - tell remoteproc that a virtqueue is interrupted + * rproc_virtio_interrupt() - tell remoteproc that a vdev is interrupted * @rproc: handle to the remote processor * @notifyid: index of the signalled virtqueue (unique per this @rproc) * @@ -54,17 +54,47 @@ static bool rproc_virtio_notify(struct virtqueue *vq) * Returns IRQ_NONE if no message was found in the @notifyid virtqueue, * and otherwise returns IRQ_HANDLED. */ -irqreturn_t rproc_vq_interrupt(struct rproc *rproc, int notifyid) +irqreturn_t rproc_virtio_interrupt(struct rproc *rproc, int notifyid) { + struct rproc_id_rsc *rsc; struct rproc_vring *rvring; - dev_dbg(&rproc->dev, "vq index %d is interrupted\n", notifyid); + dev_dbg(&rproc->dev, "virtio index %d is interrupted\n", notifyid); + + rsc = idr_find(&rproc->notifyids, notifyid); + if (!rsc || !rsc->rsc_ptr) + return IRQ_NONE; - rvring = idr_find(&rproc->notifyids, notifyid); - if (!rvring || !rvring->vq) + if (rsc->rsc_type == RPROC_IDR_VRING) { + rvring = rsc->rsc_ptr; + if (!rvring->vq) + return IRQ_NONE; + return vring_interrupt(0, rvring->vq); + } else if (rsc->rsc_type == RPROC_IDR_VDEV) { + dev_info(&rproc->dev, "vdev intr is not supported yet.\n"); return IRQ_NONE; + } - return vring_interrupt(0, rvring->vq); + dev_err(&rproc->dev, "Unknown rsc type: 0x%x\n", rsc->rsc_type); + return IRQ_NONE; +} +EXPORT_SYMBOL(rproc_virtio_interrupt); + +/** + * rproc_vq_interrupt() - tell remoteproc that a virtqueue is interrupted + * @rproc: handle to the remote processor + * @notifyid: index of the signalled virtqueue (unique per this @rproc) + * + * This function should be called by the platform-specific rproc driver, + * when the remote processor signals that a specific virtqueue has pending + * messages available. + * + * Returns IRQ_NONE if no message was found in the @notifyid virtqueue, + * and otherwise returns IRQ_HANDLED. + */ +irqreturn_t rproc_vq_interrupt(struct rproc *rproc, int notifyid) +{ + return rproc_virtio_interrupt(rproc, notifyid); } EXPORT_SYMBOL(rproc_vq_interrupt); -- 1.9.1