From patchwork Fri Aug 19 01:40:58 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nitin Chaudhary X-Patchwork-Id: 660653 Return-Path: X-Original-To: incoming-imx@patchwork.ozlabs.org Delivered-To: patchwork-incoming-imx@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2001:1868:205::9]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3sFm2Y3MjKz9t2N for ; Fri, 19 Aug 2016 11:43:33 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=zodiacii.onmicrosoft.com header.i=@zodiacii.onmicrosoft.com header.b=ewRKUQYT; dkim-atps=neutral Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1baYom-0004BS-UG; Fri, 19 Aug 2016 01:41:56 +0000 Received: from mail-cys01nam02on0079.outbound.protection.outlook.com ([104.47.37.79] helo=NAM02-CY1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1baYoX-00044l-0l for linux-arm-kernel@lists.infradead.org; Fri, 19 Aug 2016 01:41:42 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zodiacii.onmicrosoft.com; s=selector1-zii-aero; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=olLfyIGv2Mxo2bjB/uViofUOIEaVnPbJ7Z1uQH5484I=; b=ewRKUQYTJvKyCClR3+sNHEr8NOKtNq+73+We0kLt8ceup57h6kk/8h1yMedCpEJSEDz5kHzqQO1wwDdZLjWognYXCBk4EochXKXrxw3HfNaVH1SPn4INpmr91YtMicyCiOO42AY9drpKj9ZN4b3HsXwYjp3KHOHzyatUXdG4D04= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Nitin.Chaudhary@zii.aero; Received: from nitinc-Latitude-E6540.ims.dom (64.60.156.46) by CY1PR12MB0551.namprd12.prod.outlook.com (10.161.172.156) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.557.21; Fri, 19 Aug 2016 01:41:15 +0000 From: Nitin Chaudhary To: Subject: [PATCH 1/3] Error: Fix mmdc compilation errors due to cpu notifier Date: Thu, 18 Aug 2016 18:40:58 -0700 Message-ID: <1471570860-2087-2-git-send-email-Nitin.Chaudhary@zii.aero> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1471570860-2087-1-git-send-email-Nitin.Chaudhary@zii.aero> References: <1471570860-2087-1-git-send-email-Nitin.Chaudhary@zii.aero> MIME-Version: 1.0 X-Originating-IP: [64.60.156.46] X-ClientProxiedBy: CO2PR11CA0038.namprd11.prod.outlook.com (10.141.242.176) To CY1PR12MB0551.namprd12.prod.outlook.com (10.161.172.156) X-MS-Office365-Filtering-Correlation-Id: eb0af5ba-d11d-4392-d86a-08d3c7d1e93f X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0551; 2:i3j6TXxdZhrs2ytKr5kpzYcbgIFH72Yan88pSxX3MTnZ+HDfJDBqQ1rrIEaXNFocWXt8rTORKGsXN8On1AvxTZHJvB8jkzM4oq4Ourutuuie+YJnG353Fh5impbieGc95NbXmHx4suHEZ01S2Kti6f7RJywsOg7RpC24HN1s8IZ1JOK12kmnCXqXD+YMK9Xm; 3:ONZ1VFg67Cwg5raTBOwMTSgWOEmCInxyDDA+bJ4jRzq8trxmQqASLmaQ62WkMOYUl0AxgDvOApxsqXhlL4wFuMs8c87yVaVkIx+VeP2Fi/UJXygO7Nh6vJFx9B6vO78t X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR12MB0551; X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0551; 25:r8UMnmfXn1TVfbqXgTa/9BLedMSeUYAp0W+6uU8NLTIGPZ6EZ/ZbmUJt/RbkBbkkgqLACyyl8TR+yLRfT814XCzttyg4b/nZ54SuFeyUQ8snrF2jbCS+0S2NPWkD6taiH8aDh3vUzMKgx8WUS02UMZ2/+WbGYQ5rOdFB61uxNvERK1P/DaLVJG0w640knQL+VnXns3F13DYxtx3rcTYAuzSIUp7e4bClNW76Aq7664gu5rkFSdrMtZhX22hM0vmJt2z9s9PF5nlK2/+gKZjROKc+clv2O/L/6WicxjOH8ILzR99YdJ7pfOTLehIHvlM0eJd0VknTTBCAQLj1SKDJMEyw8Qy2ukKqWGUKkTFiVtzOgdlOnh1yy8V2JkfLZ2q0lgPymD9O9K4zxukOgHGwai4gtWJPCnSi3uEjwpwWZ7F7wuT2Fk4x6PJoaDlhe5ZtKzxvcU7MKIdiL4VX3zV1NdENN0kb+NTAUss3ML6X3DZltTp1PcLXTbefnjnxLqMLLHO+PfZl9IAWSQ6Q4qKRJUpKoc5ik6O2nYJ2wo69oS+RHsOJ4UxK7nK7uOU7amFdsIqTsMi3lUlv/VAbmnPYQzC7WWCsh7iVjzyJB5YTFqXFev0dWvZ2+okopAjOSp+1MHGfobbxEzjiwEgzVyuZSDgm27yMJVnkHNevn4Me08uzcF6aMNdYeF0haTByUFKdSbfys+U2U9+v8PlYt9YR04cxDA37c/zSmC+IhfAYcxm6ERhRCW4YMDpiRq/4TW6H2r2ED7dB7GeRKkKdCT858WJwq8RkGjAvvHxOjTpGWIc= X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0551; 31:ghjq3muApVSs5ZtaUUPlX717y0GihAZwPUMrzg743m7Lwl0H9xb6RCcOBfZn9mdsEqyMg4txH6jwO3LVPVYD1/q2W2MGNPrj45S0MMO4ez+dBQU5h6FNveK8uBjBFyX6h00CETSGqF794vQ5ROas/xSXFXNnDJetKd7EJnQVRX94M8mSht5i2f/BtNVsr+T+kKa6CwmuQ4DV0szYn4mIzFE82YtypMU4cUjJvRWL/O4=; 20:Q1xSHarKawGc/MO+QVhPVkod+4pFeZSdnWRm1QRS4w9UUFAUOIFju09TxtBOc6U+0qpyCnE28YEgQKER9jhdTpQvUM5xj2txObkuZgd37AwOg8ulKuERGqDKk9D3rnf+Z+cFS6M0qjePd1QzCYR17NBF0Zn8LiIDHJXLJ9MXq4Y=; 4:+I4IgmssOIQhBEqhLtR6HlFOlISQpcoVUNmlUm+HX+zxhlTerevmrr1c3g0AKQrDROv8x0ZTLH66xaWnE3cIEgbcYhx2RxQx4Uf9oTn0FLYWp+MInVsgtIOUlohyckBw2tLqOwIrc0YuUvV2oIjnL/E6SB0fuc5zAnIU4yDtCvoelKVeamIafOG/oQ2A1AsboaXWrZh6xnpdJJfz0ICoJCBBliCalEMQ889dhm+Udu62sz28cHCwcblYIyk0KP3KtdDLjQADeL2cNrQPVsBewUUnKqAhYgvH9QcS6KG3VgTT7XcT6baqr0wi550WQaG4T+kvsP9HKpHHyvFTS5yUd7aV1nuoDrKsP87OD6Oc068bO3D85y5YEP54uoE8Br47ICzi9mqOk6asKwfN6p3rJt+lC98ZvXYbh5+aBEktIFI= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6042046)(6043046); SRVR:CY1PR12MB0551; BCL:0; PCL:0; RULEID:; SRVR:CY1PR12MB0551; X-Forefront-PRVS: 0039C6E5C5 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(189002)(199003)(40124003)(50226002)(68736007)(19580395003)(36756003)(7736002)(2950100001)(586003)(86362001)(8746002)(8666005)(101416001)(7846002)(6116002)(2351001)(77096005)(97736004)(3846002)(110136002)(92566002)(47776003)(4326007)(66066001)(50986999)(105586002)(53416004)(189998001)(76176999)(50466002)(2906002)(42186005)(106356001)(229853001)(305945005)(81166006)(48376002)(5003940100001)(81156014)(8676002)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR12MB0551; H:nitinc-Latitude-E6540.ims.dom; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:0; LANG:en; Received-SPF: None (protection.outlook.com: zii.aero does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR12MB0551; 23:a9Ih3V/ynZz4lSbOJ0hcc7HvJULt+6jv7euXNzBXY?= =?us-ascii?Q?k80SRvtS/Er+96x37zNIPs9WKIppt2Uh2f6aMyWWyD+fy5xvUnZ2GfsbQHIL?= =?us-ascii?Q?qDAgX3NYm3oeVRQp/ZyeT3d10gkMv5xN8b7PinvkOkej4O3p5cWL3k636E5f?= =?us-ascii?Q?m9z2ErRmLVlU25wvCeHVGBkQAQBTPkjjzhOArCugDsiObrW+osywVk24EflD?= =?us-ascii?Q?llWRGDCRtuRY+hGeOy4JEULyOwmxBtt7WWdOjFuOxvFRvf9XrD9U1qoSbdZu?= =?us-ascii?Q?xppF1JUPe6iGlx0bQSLOl5N4IJ1IzQv66Hd2tK6d4RGteXHLlHlHCFNmFj+Z?= =?us-ascii?Q?5ublxL6dd4TbenJREmH0rdpxyiFFi1SkCCRqEccXyejTxbWSErCMRjypzrqh?= =?us-ascii?Q?KNQsN1IWIMkNOL37zBKoKNWh36hIh260r6nf1NkWqUiBdAe9OjnI76ykgwfB?= =?us-ascii?Q?boIFqppvPEUKjPH2PUlj+ukKz/o0Z71HU2AohCSYnKShDdgqRYKqXUfAeLxl?= =?us-ascii?Q?oiR2hVWCI6C1b0H9jPgRqqiRWa2XYc37eTraQnOvu9Isw/gXPXKYllNwfHfB?= =?us-ascii?Q?kacZCLpkMpXuxczxzpOt4x4sDST1qmOzyjJEw/p0eavwtrMYfN2qvrn8L+yy?= =?us-ascii?Q?vfPPkhWc0TMJEaBAf5uKpsa9gTzXMlVewTHTrIofCGvx/apQzsirrkDZh5TY?= =?us-ascii?Q?p03vUQJ/92SC+ORj/AJWUbLvTV3RwIYF/ykPvxckxZfr/8F6Yl+EwYVtmJBc?= =?us-ascii?Q?/67syeA7QEjRTDG/ADDfD2rGKuHgFCUGmwQK9HidZMAEuyLgnoxzDOwLCHV+?= =?us-ascii?Q?6cu0ry1DJZsJ0a3biGpQpNlbZuKCMPktum+FohY2XYJgGt8PgZtx3ds0tsMz?= =?us-ascii?Q?lSFOVCjW7zjF3ogS9kQ8MrFyGyJ790ZeHxiDIARFvBAQb9wr5AAeyKYuBrdy?= =?us-ascii?Q?7UogSBvmRbui3AQIeGLgNme044nLV9KaVkeEhDsUWkrWvoVxK48m+zS3ESOc?= =?us-ascii?Q?rJe0sSU+37X8hb6xuDLOfteHNWW1vguqXGPcRc9jlECSiz1ueQGTy2sHgYeO?= =?us-ascii?Q?1bCpiQQZPBEJ3SpXbRC4ZyzyJwmRylZnhIJZIk7P0G8xQ30WV3aXgiRWWrNQ?= =?us-ascii?Q?4SqOvt/OEc=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0551; 6:h4wrfbcBhJhfHB9+9jbxQgN9DChQN7rqFsdNMUZs++Wg0SHHzZqqi1MIO/obDiOVBS6TwBHU+yiLMgC9DwwNVGWJjUoU7Wd0OotYSVQHLUCqgz1Czrsmv/hY/nHGYtDNnxLh9c4IEHYpZLLy5M+C7eRc2WgLHR1UI2SeJlR/P7zv/9qje+YzCLFthzvuH4qjrxZ3vVpgr+sjbR9Fs4b8s1aSFEtjnV14vkNzuAwC4YGK9cNP806ggg6GjCt91bghSoIjYLMOgGPB8h+sEGIpUbe/IKNOL1Z43tt7wLNMi+ouxQtBgZt5P0pLc2XL77ST; 5:LngeBMHMHVCfp6A2iKPjtTAz7TMOIl/kBtJ9+x5lqiwL3Rqoe7q1kzcvkYi2sNUQwEpwsF4PBoIZVU43L6jYD6ii6zzo0uaBOB59FBE/Il3vpq85ywOPvf0th1GiQVI2kXLb3/AZ/+vzJ6FdNyMzHA==; 24:kH2dkt4DRPpV3sKCONsdoSiw4kYv4vN2X2gkx3cg6IZ91ucJOZPToWruU6A+b8dEQVft9jx1+2B8fd3J2gikp16YS35HuczI2JAzcyGNYYs=; 7:u3X7kra2dE97gHvQNFKeCBA37Afho8w8wmzNCRwrbBrzwsak0pLTgb9l8DsLuKe6tJqeetl22CJ9X4K5oPgTK3WyxtcP+rhs7RB+bRsjuVHy/FV5oUgJCeP9C5KvhAs7oCZ5NvwCe0FRJD+hEftI9rsuaD7OhirK5xCuf1axzKeV9NMQRzJ08CDpqaFuISB7R5HrZFwlskRPighqJgLc9LKTuzsRy1YuGODZ12XH0ak12vz9jwjLSJ2Aoejng4TF SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: zii.aero X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Aug 2016 01:41:15.9375 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB0551 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160818_184141_217955_BFF8B768 X-CRM114-Status: GOOD ( 13.20 ) X-Spam-Score: -1.9 (-) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-1.9 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [104.47.37.79 listed in wl.mailspike.net] -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [104.47.37.79 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nitin Chaudhary , nitinchaudhary1289@gmail.com, cphealy@gmail.com, linux-arm-kernel@lists.infradead.org, Chris.Healy@zii.aero Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+incoming-imx=patchwork.ozlabs.org@lists.infradead.org List-Id: linux-imx-kernel.lists.patchwork.ozlabs.org --- arch/arm/mach-imx/mmdc.c | 89 ++++++++++++++++++++++------------------------ include/linux/cpuhotplug.h | 1 + 2 files changed, 44 insertions(+), 46 deletions(-) --- 2.7.4 diff --git a/arch/arm/mach-imx/mmdc.c b/arch/arm/mach-imx/mmdc.c index 372b59c..95c222d 100644 --- a/arch/arm/mach-imx/mmdc.c +++ b/arch/arm/mach-imx/mmdc.c @@ -77,13 +77,14 @@ struct mmdc_pmu struct pmu pmu; void __iomem *mmdc_base; cpumask_t cpu; - struct notifier_block cpu_nb; struct hrtimer hrtimer; unsigned int irq; struct device *dev; struct perf_event *mmdc_events[MMDC_NUM_COUNTERS]; }; +static struct mmdc_pmu *pmu_mmdc; + static unsigned int mmdc_poll_period_us = 1000000; module_param_named(pmu_poll_period_us, mmdc_poll_period_us, uint, S_IRUGO | S_IWUSR); @@ -96,7 +97,6 @@ static ktime_t mmdc_timer_period(void) static ssize_t mmdc_cpumask_show(struct device *dev, struct device_attribute *attr, char *buf) { - struct mmdc_pmu *pmu_mmdc = dev_get_drvdata(dev); return cpumap_print_to_pagebuf(true, buf, &pmu_mmdc->cpu); } @@ -149,7 +149,7 @@ static const struct attribute_group * attr_groups[] = { NULL, }; -static u32 mmdc_read_counter(struct mmdc_pmu *pmu_mmdc, int cfg, u64 prev_val) +static u32 mmdc_read_counter(int cfg, u64 prev_val) { u32 val; void __iomem *mmdc_base, *reg; @@ -184,7 +184,6 @@ static u32 mmdc_read_counter(struct mmdc_pmu *pmu_mmdc, int cfg, u64 prev_val) static void mmdc_enable_profiling(struct perf_event *event) { - struct mmdc_pmu *pmu_mmdc = to_mmdc_pmu(event->pmu); void __iomem *mmdc_base, *reg; mmdc_base = pmu_mmdc->mmdc_base; @@ -193,32 +192,27 @@ static void mmdc_enable_profiling(struct perf_event *event) writel_relaxed(DBG_EN, reg); } -static int mmdc_cpu_notifier(struct notifier_block *nb, - unsigned long action, void *hcpu) +static int mmdc_cpu_offline(unsigned int cpu) { - struct mmdc_pmu *pmu_mmdc = container_of(nb, struct mmdc_pmu, cpu_nb); - unsigned int cpu = (long)hcpu; /* for (long) see kernel/cpu.c */ unsigned int target; - - switch (action & ~CPU_TASKS_FROZEN) { - case CPU_DOWN_PREPARE: - if (!cpumask_test_and_clear_cpu(cpu, &pmu_mmdc->cpu)) - break; - target = cpumask_any_but(cpu_online_mask, cpu); - if (target >= nr_cpu_ids) - break; - perf_pmu_migrate_context(&pmu_mmdc->pmu, cpu, target); - cpumask_set_cpu(target, &pmu_mmdc->cpu); - default: - break; - } - - return NOTIFY_OK; + struct mmdc_pmu *pmu_ptr = pmu_mmdc; + if (!cpumask_test_and_clear_cpu(cpu, &pmu_ptr->cpu)) + return 0; + target = cpumask_any_but(cpu_online_mask, cpu); + if (target >= nr_cpu_ids) + return 0; + + perf_pmu_migrate_context(&pmu_ptr->pmu, cpu, target); + cpumask_set_cpu(target, &pmu_ptr->cpu); + /* + if(pmu_ptr->irq) + WARN_ON(irq_set_affinity_hint(pmu_ptr->irq, &pmu_ptr->cpu) != 0); + */ + return 0; } static int mmdc_event_init(struct perf_event *event) { - struct mmdc_pmu *pmu_mmdc = to_mmdc_pmu(event->pmu); if (event->attr.type != event->pmu->type) return -ENOENT; @@ -243,17 +237,15 @@ static int mmdc_event_init(struct perf_event *event) static void mmdc_event_update(struct perf_event * event) { - struct mmdc_pmu *pmu_mmdc = to_mmdc_pmu(event->pmu); u32 val; u64 prev_val; prev_val = local64_read(&event->count); - val = mmdc_read_counter(pmu_mmdc, (int) event->attr.config, prev_val); + val = mmdc_read_counter((int)event->attr.config, prev_val); local64_add(val - (u32)(prev_val&0xFFFFFFFF) , &event->count); } static void mmdc_event_start(struct perf_event *event, int flags) { - struct mmdc_pmu *pmu_mmdc = to_mmdc_pmu(event->pmu); void __iomem *mmdc_base, *reg; local64_set(&event->count, 0); @@ -268,7 +260,6 @@ static void mmdc_event_start(struct perf_event *event, int flags) static int mmdc_event_add(struct perf_event *event, int flags) { - struct mmdc_pmu *pmu_mmdc = to_mmdc_pmu(event->pmu); int cfg = (int)event->attr.config; if (cfg >= 1 && cfg <= MMDC_NUM_COUNTERS) pmu_mmdc->mmdc_events[cfg - 1] = event; @@ -279,7 +270,6 @@ static int mmdc_event_add(struct perf_event *event, int flags) static void mmdc_event_stop(struct perf_event *event, int flags) { - struct mmdc_pmu *pmu_mmdc = to_mmdc_pmu(event->pmu); void __iomem *mmdc_base, *reg; int cfg = (int)event->attr.config; @@ -300,7 +290,7 @@ static void mmdc_event_del(struct perf_event *event, int flags) mmdc_event_stop(event, PERF_EF_UPDATE); } -static void mmdc_overflow_handler(struct mmdc_pmu *pmu_mmdc) +static void mmdc_overflow_handler(void) { int i; u32 val; @@ -312,7 +302,7 @@ static void mmdc_overflow_handler(struct mmdc_pmu *pmu_mmdc) if (event) { prev_val = local64_read(&event->count); - val = mmdc_read_counter(pmu_mmdc, i + 1, prev_val); + val = mmdc_read_counter(i + 1, prev_val); local64_add(val - (u32)(prev_val&0xFFFFFFFF) , &event->count); } } @@ -320,16 +310,13 @@ static void mmdc_overflow_handler(struct mmdc_pmu *pmu_mmdc) static enum hrtimer_restart mmdc_timer_handler(struct hrtimer *hrtimer) { - struct mmdc_pmu *pmu_mmdc = container_of(hrtimer, struct mmdc_pmu, - hrtimer); - - mmdc_overflow_handler(pmu_mmdc); + mmdc_overflow_handler(); hrtimer_forward_now(hrtimer, mmdc_timer_period()); return HRTIMER_RESTART; } -static int mmdc_pmu_init(struct mmdc_pmu *pmu_mmdc, void __iomem *mmdc_base, struct device *dev) +static int mmdc_pmu_init(void __iomem *mmdc_base, struct device *dev) { int mmdc_num; *pmu_mmdc = (struct mmdc_pmu) { @@ -347,12 +334,9 @@ static int mmdc_pmu_init(struct mmdc_pmu *pmu_mmdc, void __iomem *mmdc_base, str }; mmdc_num = ida_simple_get(&mmdc_ida, 0, 0, GFP_KERNEL); - + cpumask_set_cpu(smp_processor_id(), &pmu_mmdc->cpu); - pmu_mmdc->cpu_nb.notifier_call = mmdc_cpu_notifier; - pmu_mmdc->cpu_nb.priority = CPU_PRI_PERF + 1; - pmu_mmdc->dev = dev; return mmdc_num; } @@ -361,11 +345,11 @@ static int imx_mmdc_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; void __iomem *mmdc_base, *reg; - struct mmdc_pmu *pmu_mmdc; char * name; u32 val; - int timeout = 0x400; + int timeout = 0x800; int mmdc_num; + int err; mmdc_base = of_iomap(np, 0); WARN_ON(!mmdc_base); @@ -390,7 +374,7 @@ static int imx_mmdc_probe(struct platform_device *pdev) if (unlikely(!timeout)) { pr_warn("%s: failed to enable automatic power saving\n", __func__); - return -EBUSY; + //return -EBUSY; } pmu_mmdc = kzalloc(sizeof(*pmu_mmdc), GFP_KERNEL); @@ -398,12 +382,18 @@ static int imx_mmdc_probe(struct platform_device *pdev) pr_err("failed to allocate PMU device!\n"); return -ENOMEM; } - mmdc_num = mmdc_pmu_init(pmu_mmdc, mmdc_base, &pdev->dev); + mmdc_num = mmdc_pmu_init(mmdc_base, &pdev->dev); dev_info(pmu_mmdc->dev, "No access to interrupts, using timer.\n"); hrtimer_init(&pmu_mmdc->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); pmu_mmdc->hrtimer.function = mmdc_timer_handler; - register_cpu_notifier(&pmu_mmdc->cpu_nb); + + err = cpuhp_setup_state(CPUHP_AP_PERF_ARM_MMDC_ONLINE, + "AP_PERF_ARM_MMDC_ONLINE", NULL, + mmdc_cpu_offline); + if(err) + goto error_cpu_notifier; + if (mmdc_num == 0) { name = "mmdc"; } else { @@ -413,12 +403,19 @@ static int imx_mmdc_probe(struct platform_device *pdev) } platform_set_drvdata(pdev, pmu_mmdc); perf_pmu_register(&(pmu_mmdc->pmu), name, -1); + + dev_info(pmu_mmdc->dev, "%s success\n",__func__); + return 0; + +error_cpu_notifier: + cpuhp_remove_state_nocalls(CPUHP_AP_PERF_ARM_MMDC_ONLINE); + kfree(pmu_mmdc); + return err; } static int imx_mmdc_remove(struct platform_device *pdev) { - struct mmdc_pmu *pmu_mmdc = platform_get_drvdata(pdev); perf_pmu_unregister(&pmu_mmdc->pmu); kfree(pmu_mmdc); return 0; diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h index 242bf53..c059342 100644 --- a/include/linux/cpuhotplug.h +++ b/include/linux/cpuhotplug.h @@ -86,6 +86,7 @@ enum cpuhp_state { CPUHP_AP_PERF_S390_SF_ONLINE, CPUHP_AP_PERF_ARM_CCI_ONLINE, CPUHP_AP_PERF_ARM_CCN_ONLINE, + CPUHP_AP_PERF_ARM_MMDC_ONLINE, CPUHP_AP_WORKQUEUE_ONLINE, CPUHP_AP_RCUTREE_ONLINE, CPUHP_AP_NOTIFY_ONLINE,