From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1423245AbcBZVqg (ORCPT ); Fri, 26 Feb 2016 16:46:36 -0500 Received: from mail-bn1bon0092.outbound.protection.outlook.com ([157.56.111.92]:51175 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752940AbcBZVqd (ORCPT ); Fri, 26 Feb 2016 16:46:33 -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: Fri, 26 Feb 2016 15:44:16 -0600 Message-ID: <1456523056-15352-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: BY1PR0201CA0028.namprd02.prod.outlook.com (25.160.191.166) To BN3PR03MB1512.namprd03.prod.outlook.com (25.163.35.150) X-MS-Office365-Filtering-Correlation-Id: f955d3b5-043b-47a6-1b50-08d33ef6491c X-Microsoft-Exchange-Diagnostics-untrusted: 1;BN3PR03MB1512;2:SMaF/3RhUisMRLXpNa57A9mY8VLv68d7Hp4I+OEIYh8kag4IlU4TRLpjC75tLuiW1pRQ0HM9m1sdMNkyFNGjnYw5letUWh9xv/QTd4G4fFMq/plrbHdrVR/RBKJ9SGh20Vjm9iIO/SqaCiDDcIZxK6iou/kMVR5w65x1lg3g+CIy5WuXpkVo6lAXIyhU47+L;3:l0qGcNhRN6gbZnSRJiWF7xJkhE1j1Rnj1F4wJ/PXmFwB9V4leyqy4meq0P7ly2HWZCpY+kfCcpADxF9Ia1myvIIX0OY54pfp7KaJujcaj+epty1bWGxpTlFDxq+RNQ0k;25:amrAnjGNBbXOWsAxGU39jTk29wuz6x8tsk2PsCtxooJcylFR7o5Q8tWoEHWsU+NlhX/obNC6wCrKWGoUDj1gtROMWzak5phKQG7WZ3lGgtPBdvFsZBOspwlPg3w9AaKahFtzB1iV9mkdtJmPuU9IBCNWtuf4OeQo8NARZrn0wCuG92YYSCPG9ZNF48+9VGnw7OJTzpuuOkj1hkLBJw0BfTLGHhfBxiw3zH4yeMqq1MoiemSchCB+3M9nZ9XVsJ3aMk4aO7+HiW93u0EaR7qzwZKKBTkX2d4OBsGbel2gcSxhSJjW+pE8Xd9YH9XlgxnevT5RH7nyBslxBB9Af01kAKdy+LGtVc8gyoBWGoTyJQI5kYPBuYCZua20HFeYWWqdW80xBT8pC1L1T4xrXiv9Nw==;20:K6P7KRUbYansNmujxH9xWJl14+N2zxU3ZHhfqdMuWJjOssz74yQ7FQlWoAeAKAinXXEfqPsZRIYq6PbWcDOczV8OW5O8NGQsjAyya7YJSP6ihadxp3tjqceILrsLOuGjQf9m04uyWhJ1IT41et409be0yFrL9ucuOSeHKzpWrMM= X-Microsoft-Antispam-Untrusted: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN3PR03MB1512; 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)(10201501046)(3002001);SRVR:BN3PR03MB1512;BCL:0;PCL:0;RULEID:;SRVR:BN3PR03MB1512;BCL:0;PCL:0;RULEID:(601004)(2401047)(13017025)(13023025)(13018025)(5005006)(13015025)(13024025)(8121501046)(3002001)(10201501046);SRVR:SN2PR03MB045;BCL:0;PCL:0;RULEID:;SRVR:SN2PR03MB045; X-Microsoft-Exchange-Diagnostics-untrusted: 1;BN3PR03MB1512;4:7oVkdwUdACYQ8XdTZ6ZbbuKBq7rzsl/IXqtE6Xwty2SZe6fRq4mvNcsQeadttwbfzxUix63cubCOCh5OcgJ7ZZGvrrM5VHYHoUh+1PQvONsVqrQjRXbdEeYk/JwF91dZTebMZyxF15uaHPsC1Fy0NrFroR3QFpKDFuBjp/cSExJT+xcbL4Lr+tgkmQsXInLl0ZmQwj3XtiJ2tvERfE3RF/md7CuQWIVjqLQVPU/f8Nd3jYCHRqmsbB46n0WKb5WHbaH6/lkFLMKj5fl37XyJnc6CAQrN+cGpxmnuN7odb2PULBtaLh5MoFeWITi8HLA5/DjXq5AxbLzY4KIik9KhmccLRwVTuJ4bTL5HF63OiSMJn2Yp0Doh4DTIIA7OMZRg X-Forefront-PRVS: 0864A36BBF X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(33646002)(229853001)(50986999)(92566002)(40100003)(15650500001)(87976001)(575784001)(5004730100002)(86362001)(122386002)(77096005)(5008740100001)(586003)(48376002)(6116002)(3846002)(189998001)(1096002)(107886002)(5003940100001)(47776003)(5001960100002)(4001430100002)(66066001)(2906002)(4326007)(50466002)(19580405001)(19580395003)(5001770100001)(53416004)(42186005)(50226001)(4720700001);DIR:OUT;SFP:1101;SCL:1;SRVR:BN3PR03MB1512;H:linuxheads99.altera.com;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics-untrusted: =?us-ascii?Q?1;BN3PR03MB1512;23:zNFsbdrhYHnh7KhCQfawCYXNbayV3cdkrpLwPUXr8?= =?us-ascii?Q?l4SGfXP1jIDx9mLUN6y5EtBRTelWnWPHHkT5aesWAlMomz6ykTm1W0lOkNzn?= =?us-ascii?Q?Wnm3mfFWkhl6Gx+1JgDMVPTot6+Q7aVz17klUSg77TqZU3wsLPHko/QZCg68?= =?us-ascii?Q?OWZ+6zra6XmELkPC2O804zXIfRm/jKPu+4S2VbEVHq/l9oPzHTZiPdEwuiE0?= =?us-ascii?Q?/mpBG2P42EyplmeWrkQKhOuXD+lr8AWZHGNRLqGy9veSJVkWSNjPMwnmHUbd?= =?us-ascii?Q?EjS0TtFP2+f34ZVSf+Thp+GEEk5RnEmSz40G081O4qj+PzCDmtXEsrXIv2Qp?= =?us-ascii?Q?scXVg5JMBz5/ZLPcBDJ5olzhCy3gentGJPE+30Aq/7FbRYW6XfHoFwC1A2tL?= =?us-ascii?Q?Sl7k2eYuwAg+h5/sUJfbVKOnmUwxLStqcBq+V8tYJBaw91OZ/jpXBL68jH84?= =?us-ascii?Q?FQTUDIdEikO36Rj8ysV56heTnbIROKXseeI/b8ZfWxNjZwd6aJf/McJnfJHO?= =?us-ascii?Q?kt+lvqU1+7TCwYnJnoEz7o1evXszcin61uzMn5HuvQdGaqbd0nhW0wUMusbO?= =?us-ascii?Q?89ZWScprWM3pT1h923CSaAiEm1cikL9oW+xxaYnTrrA5IFOBpu4BlNkxRe8S?= =?us-ascii?Q?WIIq70jac6GoBSkKO3wMeoqIVm9it+iZ0goRO5VSzI79sBjLX/GKF+YJ+KJc?= =?us-ascii?Q?aJQkPwZ/8Grm4DYfFspqK/EhRnijfnbE6XUG0PThxCIO2FaFZ0/KCsb1UB/4?= =?us-ascii?Q?QX13jGzdTQnBgKlRpTK77kCzHyNjYlMwSgLewoPvWUnAw4w19OfXUWuz/bP4?= =?us-ascii?Q?xTZS+1Xbd4P98bn4856LRpIRE+i9lHG/1pQjQ1IxVX1rKTfvC05e3GLBLMJe?= =?us-ascii?Q?8aISPbTi6YRp6/b0Uxx8nJQbrFo7UC0US0Gam6lMXPtM17LGXxnr1SYPOgo3?= =?us-ascii?Q?VnspXSWw1E4L4yVeUS0ME8CK36QunDDLLCMSbm869lsVBjXYATNVXisQumJd?= =?us-ascii?Q?xeVuCAbfiYgP3bmmErNxKb7tyKGurVayqmLFdmDExpxbA=3D=3D?= X-Microsoft-Exchange-Diagnostics-untrusted: 1;BN3PR03MB1512;5:58U4Zij4fBCHBeAyPr6xVizs5bYZatK6/lZjmSifbIah4cV70yfBHpBTpUAS2WpgkOD3CVfD0A+4D5CSalOTLCdQyywzFsslNb0GtdPvDE6Dhld2G6m7MR8m/Mu5gc6I2XIJC33STk+YUaeJIYnp6A==;24:UNLixwmXeiZQ8qthd+T1Vyz2PKs+u6e4C0edW8g2T3SnkrWaGjlZoaL2nVcXzAyoG511+Gq4gTmP2rHdssnJU/4lPYNMfLfdPJ2jy9WX7wk=;20:5bmz8sxtggqonNiSLKJ6vofr+AP+tEAv7OiEbpWlAI0e6wvfR4vUd6kTtLNWYqXXRrky164sbryRwry6078fWMOQ9l0OkEUrL0fPowmoMtxyVGdfThznBQmeAdC6kjUzoxkjhkT638bB6cOH5Fllgg355u1OVQ6BpF2TeHPSrIY= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR03MB1512 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: BN1BFFO11FD021.protection.gbl X-Forefront-Antispam-Report: CPI:66.35.236.236;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(50226001)(229853001)(92566002)(48376002)(33646002)(50466002)(19580395003)(77096005)(19580405001)(106466001)(5001770100001)(122386002)(66066001)(6116002)(85426001)(5008740100001)(40100003)(5003940100001)(189998001)(105606002)(6806005)(11100500001)(1096002)(1220700001)(5001960100002)(53416004)(21840400001)(107886002)(87936001)(50986999)(3846002)(3720700001)(956001)(16796002)(47776003)(4326007)(2906002)(575784001)(4001430100002)(15650500001)(586003)(5004730100002)(86362001)(7099028)(4720700001);DIR:OUT;SFP:1101;SCL:1;SRVR:SN2PR03MB045;H:sj-itexedge04.altera.priv.altera.com;FPR:;SPF:Fail;MLV:sfv;MX:1;A:0;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD021;1:zpLu5ocyznGqJZx2PZcqTSU6iuMplHGTZMiZg51a24GyBEpJkYchwSKOoiInqoFqWICA3LAizqGqGcWdXVId1rjmbh/yfMkIw6vUnMKjZiPohRAtA7XcxsjnscXIExx6pakk+YzC1FT3LoX+Of8CEguJ/Vrg0ak5KnsNYfvyT3tDb4eldJnNprEbzHkrNBgIXxQ3z43s5yadZVLcgDao/kY6d3WY5fbvha5A1bsDTaNplgmp78TGB66Dt9spgjTdInIa8U0uz0YCKgX7IsMftnV5IDzYbD6GYl92R7jmqN/ScRW01w5/MyP9F5AKyx+3LSoSxF1ixCbcURwutIsV0G2pFI/qMjzBE3x9Vhh9RLgLAbfjfjoDWmga6e1F8vyGKULZ5lkOA99DwJlfAO/MizPInQGH+3WzlsaTg4MWaIzBILdDh+shC5Z8R7tkKX601KfEwyrlS/234quIBvgvLg== X-Microsoft-Exchange-Diagnostics: 1;SN2PR03MB045;2:yewV3BuZXaJtAvB8VqykYqsIc182aztpAVoGZeffTyDnQEBydCgdxl79rv0/WY984iK+PISu7Ji3bare5O+KOoAsBMpsmd6xqwqWF9jOb+58c52UNMFhe7rqvloJWQ/nyGuBanERyUMTlGx/qcvNijOpyJN0AfNOa0JOn4lqhse+sKWy7ef23/j+BOLQkHBM;3:2W9hraUcn1SIcXBfmTfWychMPUlEFNWJrwQL1k93r71LfKNvqqJlvgmdp4olsWCl0SMRMYmVZdNFdxPPY7320l1ZlQC/cOD0rPCoaLCv3jFBbAS78iwreh+yX3ipnH/aDPhgn2y/7Wyji6jidqNgKUlD9Z6FMAY8Trc1/bzQ5/Mg5QJ7QJIRz+lmiFOwAmq45GwBEUEGN6yY7KmY24RfxQ==;25:O8ACH+vW9m+V8jyKUgyBSA+4YCIng8A6JYjmwHwil6Id1armTMgYq3Bkrzze68OOspm62ct+sZz61ol6Yqa4oJCIu55lDl7BhoYTLTcnbafQ4dVJersnBw9RxRi+g43+tzpxkjbbhMHCxN6KJiggBCXPJDKD40vCLLLr3KA3u1S69R94NydONRw4EMfof16Wk8fwC2p/YgUJeq9o/Wu2YXW9w98pcn6GLw4bV6JfhYV1WFadXPG9d96Fr7Iu6+TKMLGd2G0OWyvdqGoosf8VEF07hA4Fu5Shhp9UsJ68w3fI4fDjgCbZJXC4/pc7OKi9Nl011dYLW2Q7n2P4AjAqMg==;20:U9hAi4Emmsl/sPkXpq5xrUSfjTYG4zJdHfaCfzUCkXI/166EhcNTj2GMjk53PTBcyzNq3TRjzeURofxe09SO1LCpgvj6RT65DAwdEAzNeh9eFJQb4BXcxOMV6RppPB7seuzsjV8cC964AQvsqiSWlDr6FQXya8EW5IEXH2uSZW8= X-DkimResult-Test: Passed X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(3001016);SRVR:SN2PR03MB045; X-Microsoft-Exchange-Diagnostics: 1;SN2PR03MB045;4:F5kLmBfS/AxkX+g2FSswWPQCOLEENqywT6AoBjESzVSdp+YIWUGuN7dMm7+hZrNkWeyme3M9ihYUgjv42DQDNj/lGnL3EST5Mdxpf3UONpC4Qo62bYUNflL888PKJ5+FG29Ffo48C1Y3EVCKmAjaumKS2nZ2nHVtTr+i2ce+VPHy96abHY0cH78WfEG1UnAB43ClwG1jeB2AiGfoj7KLw66CrZ9/4KcG0cmH9eS69tbWXG9NxufBWWUlHMXSjRARQ2imqp8kxWPUu9odCjB8eERp9T3CWwB7IcJhdbBRQkQihZMMRxOQaL/qznvdgAMRRTMKb7avWmuhkx9ZnsfdDVxMcHhnH/n8MuyIZRNv24JS0XI6emUZqPmXtgaa21rarFArKKq36cexCzR6xunQSq7EP8e+JqZ3uSayE7uEP4/kEC1wz+yEDGYlFMcGbausorrWh/nkc/uAHpjkBeQRXw== X-Forefront-PRVS: 0864A36BBF X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN2PR03MB045;23:QwlO7eMl5xA07yskG3URQME2Ss9MC/x5vEertz4Lrv?= =?us-ascii?Q?bSHU0F/M3jq5TYVyUDCcQMMlmLmsucD4nz3/INS302oBsJqpHg9KH3kV/31H?= =?us-ascii?Q?LFXjmQsDjpltJ/9KuEaDFonUYK37FoEkDxubTFDoP/HSPkatGzmKxCsAVXyc?= =?us-ascii?Q?4Qq4rvX658xl1Q2bOg8SCxrE6c3PrjfyVPX3VhiSTZNjt0jGmuWWA9fKFnn2?= =?us-ascii?Q?0Aa0gCH8qS6gN2BeEs1g20LJU8aOSTr2xhKkJb56LP+KBpnO8QZBA38JrqRx?= =?us-ascii?Q?575wvw1cSFIxjYTZdfx+tyS2iRASvKRclbt2wdq0kkuiW380r4kxddz0hj76?= =?us-ascii?Q?L1Mwo/+4ccGgsD06fNlHlYMN3lf9ieoc/OyC2TfVVie5U/Ev51dZM7aoVaw2?= =?us-ascii?Q?4jg11zfQM4IFqT1wve7ucBEBxC4wuJ/eMeF3EHGYC2kOwlHWSOQzMUcvxfBp?= =?us-ascii?Q?qAsI4WRuZURAXSQ0l1D+P8TxmvEkFY9r4hC8OiInyf6RoX37o7aB+7LcOQUO?= =?us-ascii?Q?XNTrmex0wZr1xoewoPHewHw0pYXcQppLN4My7gz74mh/HZ/Qxl0WsKlE0ONY?= =?us-ascii?Q?fPRtKc0yOCryLK1AFThnUpFJjVIviTwMff9qwGo5OwROfsJfZVTLW2BXbWKc?= =?us-ascii?Q?ioKLf1l+SbhyntETcVy0rL6PtuOPpvy5mQ45A3WGMxTSsRKAbDuI4pzzXjFp?= =?us-ascii?Q?Diq0CGMj5eUFTVdFgE5Qb/C0MzNpIxcrO43WiFUAeoqWvEUKgEyC9pcMoWYJ?= =?us-ascii?Q?TSEBcpp5jXOkZiMtybPzRV9/s/meZDdS6Gg1lY+ClbVjVUuJZoF4HWCz4Z6G?= =?us-ascii?Q?R1ezGN4AXQijE9+3Rly03HTSIRmPOYEGjNS67kZWNPCYNi4D9ZbxV1fNFvF1?= =?us-ascii?Q?s0S2vdvVVYR254MwvAGwO7NjpevQFBMa1/suwk1sEaSGf+UQXEuePX5TS0Ng?= =?us-ascii?Q?csxd0wglUTt689I5tkD9MN4U0RKALn0k+KN4bLQMCc81Qe5Ln/datXgtFZy0?= =?us-ascii?Q?WNicqt7PkddNsawmf0EoMszGeXTLHEMi5DigbecC2htfRVWqnF8H+mf4cjwr?= =?us-ascii?Q?zSg/WMZm1huf0D5zyWSpWn4bBa/e144WzuhgZJ0lqDcg/L76G41LdjZrPCIG?= =?us-ascii?Q?PZn55kf69K6yQKp6Oxtm8CC3/S8thjr7WBR0FInglq4m8U3hY+iFzJgXg5lr?= =?us-ascii?Q?wEcIXsaIP7kwPV4t5H/x9iZj13Gt6DatG4iiQC09BvrNcjksZepgBsweX0mM?= =?us-ascii?Q?Zdflnm4ARWKiLSn/CaP1/ZbMZJvoGO88JrTVv0a2rVtTkCLQVs0/KAQEM0gD?= =?us-ascii?Q?f36ReujM7MfupnOd/rBga1FiWNLt+dPrYsIlV1ykxgqcQgtiiXjIsOHQypj5?= =?us-ascii?Q?+how=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;SN2PR03MB045;5:Ly6IABiBnDfA2BXzub+G+qY5qPw2u0y4dMGWrI+nQhrKkKNOuYC6/C98VjU4h5uWc1dgqJEFh/Q1ofkcbmBdo+EfeXkgQAcT9NlEzoApgxFjB4B8GkCzc/6ezQtrzOWfFpIG5BaxBlRK1Kb4r9mUPA==;24:aYz1R8huSIJv4zcT3IKJDs1U3sGAPO0Cdl6FmUzCfwi/kach6fpNZxmvdzGibzVKkjbPYyTgXJ7I9OSLTFB9/hqwLaDLx9EFvX1mt7eV/tw=;20:SVWglsFW/ceY2GWJbQfxUrmtsbjFKAgAaN8jaFVAg/+k/0h0EqkPAdgaLo88MQ01UMzbJkyQ3v539dFsaOxgp3h4viq6oFEX9UltRn+AipBWWh8lUydsQfqgNFVX1S7isaD6o7Fx9cv0KNdxfI+vpdPMr4SQYU2qx+VJcTtb+BE= X-OriginatorOrg: opensource.altera.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Feb 2016 21:46:29.4615 (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: SN2PR03MB045 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 --- v2: add missing 'static inline' in of.h --- 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..b79e1c5 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; } +static inline int of_overlay_notifier_register(struct notifier_block *nb) +{ + return 0; +} + +static inline int of_overlay_notifier_unregister(struct notifier_block *nb) +{ + return 0; +} + #endif #endif /* _LINUX_OF_H */ -- 1.7.9.5