From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752587AbcBYXjL (ORCPT ); Thu, 25 Feb 2016 18:39:11 -0500 Received: from mail-bl2on0057.outbound.protection.outlook.com ([65.55.169.57]:39936 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752112AbcBYXjH (ORCPT ); Thu, 25 Feb 2016 18:39:07 -0500 Authentication-Results: spf=fail (sender IP is 66.35.236.236) smtp.mailfrom=opensource.altera.com; ettus.com; dkim=pass (signature was verified) header.d=altera.onmicrosoft.com;ettus.com; dmarc=none action=none header.from=opensource.altera.com; Authentication-Results: kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=none action=none header.from=opensource.altera.com; From: Alan Tull To: Rob Herring , Pantelis Antoniou CC: Frank Rowand , Grant Likely , , , Moritz Fischer , Pantelis Antoniou , Alan Tull , Dinh Nguyen , Alan Tull Subject: [PATCH] of/overlay: add of overlay notifications Date: Thu, 25 Feb 2016 17:36:22 -0600 Message-ID: <1456443382-29781-1-git-send-email-atull@opensource.altera.com> X-Mailer: git-send-email 1.7.9.5 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [64.129.157.38] X-ClientProxiedBy: BLUPR11CA0017.namprd11.prod.outlook.com (10.141.240.27) To BLUPR03MB1505.namprd03.prod.outlook.com (25.163.81.23) X-MS-Office365-Filtering-Correlation-Id: 355220b6-d29d-4c73-8df8-08d33e3cd8c4 X-Microsoft-Exchange-Diagnostics-untrusted: 1;BLUPR03MB1505;2:COXKXB8DWYcl8XNf6/tKekv0dOMwV3N16YfCn+O76ghm3s/Yv+E01tLTI9IkikUy/fbJVxUuWBBr6uI7S/n8bNSiuSSRm8QTDDUoPNZ1b+ZQSR02GyzvL6K6U2J784U5TcnJEhnoRYHHeJ+H2/cg+xmJfhohYAc5vcc3D6vvqizgQ2vLywk6r2lCETBAjxmQ;3:/VAv844meI/A6HSjqyhU9u3q34vg2eI79xNNhvTGFhUKFBd6ScleW9yplhWdSROGyZf1zpLlEygfPjc56GKDMj3xojxnzAQs7o85EKogEba1TyAmztFd8OJm+TYmKMaI;25:0EqwFmMzzDQD84CvLkuGC4HZiTpC0fnelQljL1NqKjcQWPiLfoaZTiS/ms+r9T+1G5zxuA9ntLmO8m1gQheHE9kkv4ih1lHLs5x6xcv0stsHJ+EYni/hSjx963aJ1ekLYNDs1o+iU3jTFsiC+LcIN10o47MXCDYp6OzE5eJkfjimKUPlbYZnfU4T/3Iop88irMfZphNajOjHzk0OIVA9aPV1ziPyDshdnVrssJu+l4sNYDLQD+DWtwoikMgv1GSoNq3cRPICZ2DRwCKtrdGD0RoTGlqwt8o8L0L8Iiw5DQavLSOFzYyHqb4FlsUmXEWNX7hkrjt9/9UXSuIWSdg7aw==;20:XmKfi9VYW3A6Ng2PkKivQY6YG3lr4xrmzpJQOsmAC8AYm/Auj6O7Kmt+hhR/6/KDjsqXhjIBP0Q44E3HwTTlQkSzCkca1Eoc3GHwLq68ax+7t08TPtpSbZdQW8mQuA7rgRFDpnr6WC8UJ5DIFNSDW62gwyxSE1t+s+gidB8ovbA= X-Microsoft-Antispam-Untrusted: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB1505; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:;UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046);SRVR:BLUPR03MB1505;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB1505;BCL:0;PCL:0;RULEID:(601004)(2401047)(13018025)(5005006)(13024025)(13015025)(8121501046)(13023025)(13017025)(10201501046)(3002001);SRVR:BY2PR0301MB2021;BCL:0;PCL:0;RULEID:;SRVR:BY2PR0301MB2021; X-Microsoft-Exchange-Diagnostics-untrusted: 1;BLUPR03MB1505;4:LEfURK+QmFgBuGxHUTUvT9T9wvzgeghkqhYxs18gBdmCRY2RQoak9F7dGgARajhZ9Is4Pg9bSWpaujXsVMJLaVDpNoZav6W6ijMiGPMd5N+0EbCcHj+waH/X4RU8R6AMKJM/nyZVRmlwiZpcgTJZceAPliEBEUd0rc0xNUKFTVQu07R4MO6lCmilMQpmcGACgGu6rCSZYQr7yWIJ4d+sIad5A0YKSc6Lui8XDNzdBnS8yW/8zvJ2uljduBwxcIQ24gnOtvYiDpjNmxf4Sm6Eu6+D1f2gL4i00EYNO7tBafY7itO8gdD7YgrpkqxVXRP8o9gttonmtupRoV8c13FT2FFxSRVhpZNL0AHfTe8Uz380l4kNNaHPhVwUYuM3wr9J X-Forefront-PRVS: 08635C03D4 X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(50986999)(48376002)(50226001)(47776003)(189998001)(53416004)(19580395003)(66066001)(19580405001)(50466002)(77096005)(5001770100001)(92566002)(42186005)(6116002)(122386002)(1096002)(40100003)(33646002)(107886002)(3846002)(5001960100002)(586003)(2906002)(5003940100001)(15650500001)(5008740100001)(4326007)(4001430100002)(86362001)(575784001)(5004730100002)(229853001)(87976001)(4720700001);DIR:OUT;SFP:1101;SCL:1;SRVR:BLUPR03MB1505;H:linuxheads99.altera.com;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics-untrusted: =?us-ascii?Q?1;BLUPR03MB1505;23:hXJxRmuZ3gM413oOmPekJYK26fKWTcLvS5kaafQXd?= =?us-ascii?Q?X/ud6KSQqmK+4A2nrll/CCtSQHMcyxk8d5KODPotZZvmVEs66aFLKQBiV/az?= =?us-ascii?Q?Tb5pKoJS56Wb4jRaPPGc/VLsbnw2a4MzcIBFojZoo/E08yH4MYkBnpYTq9c+?= =?us-ascii?Q?Bx69aS/RXzWUpnxvtFd+J62BUHGXuUweX1pA+Rk3JQCCDVmigq2OE0FKpkAC?= =?us-ascii?Q?lfqRVnGfuJ1njEefkoC/6+ToytbunMzFKJ6nBWXi+1KXgyzAyVrTJg5yxk8E?= =?us-ascii?Q?ZyILBgQLeOJYNgNLyVgqh7dgtTykjLrgcUM7sBHwBEKdJSQofKKUudetpFSf?= =?us-ascii?Q?NYvTcPdjQavjkBWbcpLhsuCffyMU3NmZeRqDFOf7Pcxpy0emjf5TVSIGkQlA?= =?us-ascii?Q?p2CNf6aHP5ULaPiqFFGJV7TdHMP5q451jbz/ijnYgFk6xeC0UDO/xkh4qw+s?= =?us-ascii?Q?BElZAsYbY8R3xMM+3TTa2+y5OqrQPo6nfgpsmxuyez/Nohkv+D98v9yxWyU8?= =?us-ascii?Q?ktKtaASlfHwH2oRZaqDviB0F/11Q/FISdSZkQYMhG3pok/e8ocRA9mD1luYb?= =?us-ascii?Q?mhZBTTPAXGDCJY2LjZp0SR+UpLq1lhnwkrPaVTauZ6brsnuKyl9OcewB/Fic?= =?us-ascii?Q?s3XvklGSn9enufPeUiO7osdbBvf9dNQhl3MdEX70s3RChzGFUMBLwZhhPqOv?= =?us-ascii?Q?/TrXTAiHe6x8wzRBHqx1NkY8JRY93qJmumJpL2n5CFc/FmUMFieqjQ+tnpiY?= =?us-ascii?Q?KrTAPWseAlA0CVBChaW9CcZTSHoSx9y8FhrKZYGrCd1JGcUHbX5Q6cL8BsX+?= =?us-ascii?Q?lSdOJW7ScgevDhLxZ6z0IzyJGDlN8fA5kLtCbdRkpaaQPXYttGOiuHSbJJKq?= =?us-ascii?Q?LGJ9NXuV9kxuWFgHMYAS3uUc6TndG/JPGNjZECvRpObgvxSDriaj3e6xmlMG?= =?us-ascii?Q?xreG0jFJFg599iNZO5YAU+CxYnxj6oE5Jf6AX+DwchyVOBEzwD+vqO3Ifxta?= =?us-ascii?Q?OSBezi9msOn+M2wojO7YZtB1gOzyYfdp3XUNDsF/yO/PQ=3D=3D?= X-Microsoft-Exchange-Diagnostics-untrusted: 1;BLUPR03MB1505;5:JBdOU2pGCoRxEBU+aix7YG5qIm9alUEGQjuxjslJJ1WbwMOmjMqnrRueWVz/GHN2gkOQM8WZClWg86FkvRS+qtxvDmXyykUmyWikt74jpVCYUVKODsFYiB077aLfMYR5X9qrQQTnwZsTDbo41GbvnA==;24:asp1IMoxsrPRPp19803kzewZ2uQVSZt06Yjbz9TM7+NF2mZg1EUCBieq5gLRhPcEXbbYuc9jGq1J7syPj2u4c2COO88fWd8VElLcc0HGKX4=;20:canKqyjDpsJlzUQ+x42ldabFMoVOJ3aimXzRSgWPq+8Z7Yf3KqOji2P7OtAI7mur37X1fjdTrhcIsFSeM/oNmAJ/qFXphORqFuqoEiTPnBfuzb/BfAYQSPq1SQjZfbkcJWNQmdgK4xOVsjuQceOQtuc2nRHIBTk9x8ZBRvZdkdk= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR03MB1505 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: BN1AFFO11FD009.protection.gbl X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD009;1:pUZxgAUEDZ1t8ZFXLG7AjLaLkl3BpanpcfPP3394swcWK15AQGBBh3kAGEwNQ17WqqJYKcglVDQPNv54je9MYb8dmGvjCld7gJ5JCxwbaGutlaMdeI5JwGX6mnVCdj7T7PUbmRRD/kHqN2YZxg78CaBRaqKbZv49QU70+jGoTfbWlGE/iCYUN1p2oTKbHu/HDGltqXZjS/vv/LsG7sqORVEkFZuSAUX5pOtK2c048twtnoFqD+m1k9/ndAXpJFFBFcnLW0ZMhTpIuqkWCy6DWWq2MmnbzZK2kvCPELsTg97mzg77gL9sMRqfwd7gA5cETd4T6N4FLqrkCfX3T77i+jhc4K/SC6WsNsIhIwDWvjVE7FH7+qsofeTalRCIQbOgGc7CGr9qhkNFEerpQRtx35EfKS7srfiaZ3vKJ4Sr4EE= X-Forefront-Antispam-Report: CIP:66.35.236.236;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(1096002)(3720700001)(956001)(50986999)(3846002)(16796002)(105606002)(11100500001)(87936001)(6806005)(15650500001)(107886002)(189998001)(86362001)(4001430100002)(5001960100002)(5004730100002)(575784001)(53416004)(47776003)(4326007)(5008740100001)(66066001)(2906002)(586003)(33646002)(6116002)(1220700001)(92566002)(50226001)(50466002)(229853001)(40100003)(48376002)(5001770100001)(85426001)(19580405001)(19580395003)(77096005)(106466001)(122386002)(5003940100001)(7099028)(4720700001);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR0301MB2021;H:sj-itexedge04.altera.priv.altera.com;FPR:;SPF:Fail;MLV:sfv;A:0;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2PR0301MB2021;2:vjC4KxkuDU7nh2pAGlD4kRXkZyJDIqzhCiQXXcZ5KQD+T5oUoBCv8BTlnK0fz5u28BQCiQa4Otf7Q15Z2Jgu7GmuaF4SyyUbMtmyL0NtBay4WXFSAb4BUGkEadfbf/fOP7AUAlzZO/n9lYgYDQUMDQt3X8s14vR16hEnM88AKo3jFItz45CxM0JcUjE6wttI;3:SC95M8tICMMs+U4c0CYsNFzrROuC8QQh643IbLt4bBgDndpGQj+hgQwSE86Bn6XXTP5n+B4ygCeS8MbIBtgnTszMECS3fXg+lWmQwA5G6dAoTiXlLpwH7FndjgErOUV1LusVLP7FJ8T5G+Ji0isD/F7LL1faFxUb24Isx/OqoG/fVL+DQ+ltSGyMDh4QDJqbibKour11el6IDRRBU155MtjanB461tEREYkG2MuRBJ2naAPo00uTm0FJEkJw2UgH;25:JCq0Wz6Ub4wMDBB0fRSXVmZzHXGHOysTyGqvXOG61hQ8aGdtzJ5YjnqrUuRUfldbaHiqCm+YO+LMWhjOMYXRseGVqLm7CXqGS49VV01CUJ4jqQkBbxaGYdk7lLRLkva1otXICWDk7GQZdnZyUwIZE7lWcOL9iLipcmR0F7m/PX/4zloCmKY6COx0efI3YCKxVBWLNzY3BrBb6396aHXza1UbsyBHl+LWy5dFdKZdEtIfBpYVkmC8AcJl3mssmGx7puyNUIHhqLlRWbjw+Z8tFeBlwpm/zEIgMDZisyPsovIqtmLCk0RE/b6MnD+7zxfRff6BxIKORD7wW2rZXr1W/Q== X-DkimResult-Test: Passed X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(3001016);SRVR:BY2PR0301MB2021; X-Microsoft-Exchange-Diagnostics: 1;BY2PR0301MB2021;20:I7YNPW4duYkIHYoQG2KoOAmWWukLOhusxT/HMhC5RX9ve9G4XOBx7wy1v+7GuVZH5y4hWTe8PT2ir/OFiVbhLmAFbpOdFo2yTTwYsjQ/lo5aB4HOjaHAppCiB0JUGdSetDOiuJsfkI8ELgsE7q3ccWSvGog+z22Yq9SzLhrUKKc=;4:1IuT52C5VXpfdQE7YOcz8MSbmqdepPnr+Gd6MBGnfsq+Gl8XspVOlAhB8KqiO1ukmhEciDdma2J+UG0VqJe9db0qQqg0MaQmaw5DrQTsOu7jombjBUgXXAEhiyIYjMtCwIkxKZuUdaQrbZrkBRC8hQAEKNsEvm+w60/kwaEeQqd1w4WqbykiESQevSbvWJRx0yNhjDSFqJwazdGfaeH2PTRxQNVKdQIhTM/23r2vOItCrFA2hU3smV8/mDTN3AicgUw74P5RCzk1EappLAMW4vTRzzSxkRyGvo/K8z2Xsnqo8DLpPwDjv6gCrJJ2CaST1LvKCtmjcCqp8qhYRmAX19869jmDnM7Krc6dME1fPkBKcyl0ePDX4utxQ5fTjkBGnmmh4msarJ7uIkd0wkTaNzNzqQCtr7A1/X5XvugVMDTKJnQU3IHDxVtQvrwHeHeG5vN+fKNLSj7+VLqh6BSsvQ== X-Forefront-PRVS: 08635C03D4 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY2PR0301MB2021;23:wlIXaqrIvpYyLZOFDzLMjCHvy7f/82UveAMaXTc?= =?us-ascii?Q?+cwL1I9hPzJSiUOttKhQ8qKQEqEi6hp8gNxp6YfcapCI/MrGwWK5W3IWovKl?= =?us-ascii?Q?8rmiXy5VVcxTtqSwBBAeIwa3XIL4WYauADWrHn8/P41PKDzwKQ9E/OwyzRHO?= =?us-ascii?Q?YRJ3CI3EMBwmuKJfTsGnOqTTOCV/ecoKVB5bMLvrE4rc2/SkxITIrdJtCvCs?= =?us-ascii?Q?TBcGzajCQV/pNkHMRiPw39nt06K3Iy+oORpqawOul/H4LmmFc0WSY0YwqC4/?= =?us-ascii?Q?goE/ive7dRv0l29KFLGekFjoQtFBOafjLNsBRQN8xN0Qc8gHPKjG9nZZySar?= =?us-ascii?Q?VBafq7oCmXrkTbHX4ec+HEmNZxDBP93cfFtC80pSUYw0ayivcfjEYFVccABQ?= =?us-ascii?Q?It1wyYC7mNGjIkKYC12Y3MlCPXFsj923pCDD6bn2JUs+UFgobSkOZp34F7Oq?= =?us-ascii?Q?r5wVzUgchTx4cq7pipNx5qKfv5lgxCPqzI6oWNf30teLjL9N10Bx6xWvfLki?= =?us-ascii?Q?ayfPcrEEbE3uwF7lD0Nm0WVkhzRyF12KiU+FYCcPV95m3LCMaMzt8U3TFkdb?= =?us-ascii?Q?Io/r3gPnvMJW5sYBSTXKsne0JGGu4ZR7KiltOeLDwwWLGEOwgWFykV9s/EfG?= =?us-ascii?Q?toH07VljENBvTT0ad7HYLZyWkSxWtQfaRaZr8izpKlqXU5MIy7dyInigUslt?= =?us-ascii?Q?xnom8LHMCCUDAy0zBGl4KzHJXIDxYuwfmDgsnQ1ycaZ3hgsUTAN+5gM5PLoL?= =?us-ascii?Q?ZqZejAoddrIl5a6IOyolPUzig22HzaHjKXRAihcPm+VgRjdqV2RbiBZWGbWA?= =?us-ascii?Q?duXzhThksFT1GOGwfNhJ+RdlZ2zJF5e3ATn/CZOBh4DJ3Pq2bhv3Oq6lahDn?= =?us-ascii?Q?vMpo1njUJq9ILgK9RT3pkUJIYw+F1909YNeaDiAWg/1acM/R5toXntgRAmR0?= =?us-ascii?Q?BHENkvnTsXoG6x4/kDAC68ZsnIkElOW41doiZQGrAM9Rl7LGraIDuZes0ic9?= =?us-ascii?Q?9diRKNx90u3YYLTmkXrXtlmJ4ht81+arExtwedIlecaLko+BBysCl7U0VTkY?= =?us-ascii?Q?g9TJ9k95Q8/GHJdAQFACAx8LVWG2AvlIKE7N5YExXM0H817+WR6SwOnelW9P?= =?us-ascii?Q?y60hAyK5r6DMCrFBOETYn9dbk0Q2AqC4jhvUl6bWH4x8SzpZJY1YwLukhVK8?= =?us-ascii?Q?z9GomvKkKspDuVYc8Pv4wWIsGH+n67x/dv3j+12WZOLthdaTW2yHZxz+P6j4?= =?us-ascii?Q?VMzZDFfbCpO/OHDfOgL7hnro5OqhzZW/Bhqu0gX2YVzV6YMB/ho2jyBjXaS/?= =?us-ascii?Q?62CR6pS26R8pPpYTrWdXNqNTt2/Z+gI/SDvz8cllIulwo?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR0301MB2021;5:3ojoO55C2NYJO3Mp8B9PeOs6BCo47KLBlhVy22R3Tpi9qzjZVQIDbIT5d01bhxqlxRA3eFDhgE7IPAioonac8X/ph3LcOLeWHbkikqlXZEGucTamXaol0vBsLoQ86P95AU5WjoeelOsqoK11zhsAlw==;24:LYZz/8e5TzHDh4baCaCuZ9XGCWfL2LY1iYGa61ZQ4WWvUNfUm2VSMPp1wl6MdjInvA37PIsE1asZ6xQnfdcsEMpocmSa9Uw+MUb+uyh0oEQ=;20:s2TNtJQk1S/l/gUXenQEUPAdD/VTraju0y3ihHkvG7m/H8rFZsPJSx6rw9H1OCqhcSgYial9Q2z5JPavXi7SPaT7O4gqNv9Fs7Ly7E2cEqnrhT5SwHYE1vvaxJpBO2VAKzETVestWKvp4DadGmIw20rMtJsV52ciSbzmFusZ3yo= X-OriginatorOrg: opensource.altera.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2016 23:39:04.1503 (UTC) X-MS-Exchange-CrossTenant-Id: fbd72e03-d4a5-4110-adce-614d51f2077a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=fbd72e03-d4a5-4110-adce-614d51f2077a;Ip=[66.35.236.236];Helo=[sj-itexedge04.altera.priv.altera.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR0301MB2021 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch add of overlay notifications. When DT overlays are being added, some drivers/subsystems need to see device tree overlays before the changes go into the live tree. This is distinct from reconfig notifiers that are post-apply or post-remove and which issue very granular notifications without providing access to the context of a whole overlay. The following 4 notificatons are issued: OF_OVERLAY_PRE_APPLY OF_OVERLAY_POST_APPLY OF_OVERLAY_PRE_REMOVE OF_OVERLAY_POST_REMOVE In the case of pre-apply notification, if the notifier returns error, the overlay will be rejected. This patch exports two functions for registering/unregistering notifications: of_overlay_notifier_register(struct notifier_block *nb) of_overlay_notifier_unregister(struct notifier_block *nb) The notification data includes pointers to the overlay target and the overlay: struct of_overlay_notify_data { struct device_node *overlay; struct device_node *target; }; Signed-off-by: Alan Tull --- drivers/of/overlay.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- include/linux/of.h | 25 +++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c index 8225081..a26f0ed 100644 --- a/drivers/of/overlay.c +++ b/drivers/of/overlay.c @@ -56,6 +56,41 @@ struct of_overlay { static int of_overlay_apply_one(struct of_overlay *ov, struct device_node *target, const struct device_node *overlay); +static BLOCKING_NOTIFIER_HEAD(of_overlay_chain); + +int of_overlay_notifier_register(struct notifier_block *nb) +{ + return blocking_notifier_chain_register(&of_overlay_chain, nb); +} +EXPORT_SYMBOL_GPL(of_overlay_notifier_register); + +int of_overlay_notifier_unregister(struct notifier_block *nb) +{ + return blocking_notifier_chain_unregister(&of_overlay_chain, nb); +} +EXPORT_SYMBOL_GPL(of_overlay_notifier_unregister); + +static int of_overlay_notify(struct of_overlay *ov, + enum of_overlay_notify_action action) +{ + struct of_overlay_notify_data nd; + int i, ret; + + for (i = 0; i < ov->count; i++) { + struct of_overlay_info *ovinfo = &ov->ovinfo_tab[i]; + + nd.target = ovinfo->target; + nd.overlay = ovinfo->overlay; + + ret = blocking_notifier_call_chain(&of_overlay_chain, + action, &nd); + if (ret) + return notifier_to_errno(ret); + } + + return 0; +} + static int of_overlay_apply_single_property(struct of_overlay *ov, struct device_node *target, struct property *prop) { @@ -370,6 +405,13 @@ int of_overlay_create(struct device_node *tree) goto err_free_idr; } + err = of_overlay_notify(ov, OF_OVERLAY_PRE_APPLY); + if (err < 0) { + pr_err("%s: Pre-apply notifier failed (err=%d)\n", + __func__, err); + goto err_free_idr; + } + /* apply the overlay */ err = of_overlay_apply(ov); if (err) { @@ -389,6 +431,8 @@ int of_overlay_create(struct device_node *tree) /* add to the tail of the overlay list */ list_add_tail(&ov->node, &ov_list); + of_overlay_notify(ov, OF_OVERLAY_POST_APPLY); + mutex_unlock(&of_mutex); return id; @@ -509,9 +553,10 @@ int of_overlay_destroy(int id) goto out; } - + of_overlay_notify(ov, OF_OVERLAY_PRE_REMOVE); list_del(&ov->node); __of_changeset_revert(&ov->cset); + of_overlay_notify(ov, OF_OVERLAY_POST_REMOVE); of_free_overlay_info(ov); idr_remove(&ov_idr, id); of_changeset_destroy(&ov->cset); diff --git a/include/linux/of.h b/include/linux/of.h index dc6e396..e70a686 100644 --- a/include/linux/of.h +++ b/include/linux/of.h @@ -1083,6 +1083,21 @@ int of_overlay_create(struct device_node *tree); int of_overlay_destroy(int id); int of_overlay_destroy_all(void); +enum of_overlay_notify_action { + OF_OVERLAY_PRE_APPLY, + OF_OVERLAY_POST_APPLY, + OF_OVERLAY_PRE_REMOVE, + OF_OVERLAY_POST_REMOVE, +}; + +struct of_overlay_notify_data { + struct device_node *overlay; + struct device_node *target; +}; + +int of_overlay_notifier_register(struct notifier_block *nb); +int of_overlay_notifier_unregister(struct notifier_block *nb); + #else static inline int of_overlay_create(struct device_node *tree) @@ -1100,6 +1115,16 @@ static inline int of_overlay_destroy_all(void) return -ENOTSUPP; } +int of_overlay_notifier_register(struct notifier_block *nb) +{ + return 0; +} + +int of_overlay_notifier_unregister(struct notifier_block *nb) +{ + return 0; +} + #endif #endif /* _LINUX_OF_H */ -- 1.7.9.5