From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 70EFDC433FE for ; Tue, 9 Nov 2021 10:31:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 61CE5610FF for ; Tue, 9 Nov 2021 10:31:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245276AbhKIKdy (ORCPT ); Tue, 9 Nov 2021 05:33:54 -0500 Received: from mga03.intel.com ([134.134.136.65]:4007 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245331AbhKIKdx (ORCPT ); Tue, 9 Nov 2021 05:33:53 -0500 X-IronPort-AV: E=McAfee;i="6200,9189,10162"; a="232367508" X-IronPort-AV: E=Sophos;i="5.87,220,1631602800"; d="scan'208";a="232367508" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Nov 2021 02:31:07 -0800 X-IronPort-AV: E=Sophos;i="5.87,220,1631602800"; d="scan'208";a="545265484" Received: from smile.fi.intel.com ([10.237.72.184]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Nov 2021 02:31:05 -0800 Received: from andy by smile.fi.intel.com with local (Exim 4.95) (envelope-from ) id 1mkOOz-00538N-4d; Tue, 09 Nov 2021 12:30:53 +0200 Date: Tue, 9 Nov 2021 12:30:52 +0200 From: Andy Shevchenko To: Arnd Bergmann Cc: linux-gpio@vger.kernel.org, Arnd Bergmann , Linus Walleij , Bartosz Golaszewski , Geert Uytterhoeven , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 6/8] gpiolib: remove legacy gpio_export Message-ID: References: <20211109100207.2474024-1-arnd@kernel.org> <20211109100207.2474024-7-arnd@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20211109100207.2474024-7-arnd@kernel.org> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org On Tue, Nov 09, 2021 at 11:02:05AM +0100, Arnd Bergmann wrote: > From: Arnd Bergmann > > There are only a handful of users of gpio_export() and > related functions. > > As these are just wrappers around the modern gpiod_export() > helper, remove the wrappers and open-code the gpio_to_desc > in all callers to shrink the legacy API. Reviewed-by: Andy Shevchenko What I wish to see meanwhile is a section in the TODO list somewhere to clean up those modules that have gpio.h. Linus, do we have one in the kernel or is it your personal TODO? In case we have one in the kernel, please add there modules you modified in a way that they still need further attention. > Signed-off-by: Arnd Bergmann > --- > Documentation/admin-guide/gpio/sysfs.rst | 2 +- > Documentation/driver-api/gpio/legacy.rst | 30 ----------------- > Documentation/translations/zh_CN/gpio.txt | 26 -------------- > Documentation/translations/zh_TW/gpio.txt | 27 --------------- > arch/arm/mach-davinci/board-dm646x-evm.c | 28 +++++++++------- > arch/arm/mach-omap2/pdata-quirks.c | 9 ++--- > arch/sh/boards/mach-ap325rxa/setup.c | 7 ++-- > drivers/gpio/gpiolib-sysfs.c | 4 +-- > drivers/media/i2c/noon010pc30.c | 5 +-- > drivers/media/i2c/ov9650.c | 4 +-- > drivers/media/i2c/s5k4ecgx.c | 3 +- > drivers/media/pci/sta2x11/sta2x11_vip.c | 10 ++++-- > drivers/mfd/dm355evm_msp.c | 3 +- > drivers/net/ieee802154/ca8210.c | 3 +- > include/linux/gpio.h | 41 ----------------------- > 15 files changed, 45 insertions(+), 157 deletions(-) > > diff --git a/Documentation/admin-guide/gpio/sysfs.rst b/Documentation/admin-guide/gpio/sysfs.rst > index ec09ffd983e7..35171d15f78d 100644 > --- a/Documentation/admin-guide/gpio/sysfs.rst > +++ b/Documentation/admin-guide/gpio/sysfs.rst > @@ -145,7 +145,7 @@ requested using gpio_request():: > /* export the GPIO to userspace */ > int gpiod_export(struct gpio_desc *desc, bool direction_may_change); > > - /* reverse gpio_export() */ > + /* reverse gpiod_export() */ > void gpiod_unexport(struct gpio_desc *desc); > > /* create a sysfs link to an exported GPIO node */ > diff --git a/Documentation/driver-api/gpio/legacy.rst b/Documentation/driver-api/gpio/legacy.rst > index eae185f771d7..34fcb14814db 100644 > --- a/Documentation/driver-api/gpio/legacy.rst > +++ b/Documentation/driver-api/gpio/legacy.rst > @@ -717,36 +717,6 @@ gpiochip nodes (possibly in conjunction with schematics) to determine > the correct GPIO number to use for a given signal. > > > -Exporting from Kernel code > --------------------------- > -Kernel code can explicitly manage exports of GPIOs which have already been > -requested using gpio_request():: > - > - /* export the GPIO to userspace */ > - int gpio_export(unsigned gpio, bool direction_may_change); > - > - /* reverse gpio_export() */ > - void gpio_unexport(); > - > - /* create a sysfs link to an exported GPIO node */ > - int gpio_export_link(struct device *dev, const char *name, > - unsigned gpio) > - > -After a kernel driver requests a GPIO, it may only be made available in > -the sysfs interface by gpio_export(). The driver can control whether the > -signal direction may change. This helps drivers prevent userspace code > -from accidentally clobbering important system state. > - > -This explicit exporting can help with debugging (by making some kinds > -of experiments easier), or can provide an always-there interface that's > -suitable for documenting as part of a board support package. > - > -After the GPIO has been exported, gpio_export_link() allows creating > -symlinks from elsewhere in sysfs to the GPIO sysfs node. Drivers can > -use this to provide the interface under their own device in sysfs with > -a descriptive name. > - > - > API Reference > ============= > > diff --git a/Documentation/translations/zh_CN/gpio.txt b/Documentation/translations/zh_CN/gpio.txt > index a23ee14fc927..e49fa88a2804 100644 > --- a/Documentation/translations/zh_CN/gpio.txt > +++ b/Documentation/translations/zh_CN/gpio.txt > @@ -622,29 +622,3 @@ GPIO 控制器的路径类似 /sys/class/gpio/gpiochip42/ (对于从#42 GPIO > 固定的,例如在扩展卡上的 GPIO会根据所使用的主板或所在堆叠架构中其他的板子而 > 有所不同。在这种情况下,你可能需要使用 gpiochip 节点(尽可能地结合电路图)来 > 确定给定信号所用的 GPIO 编号。 > - > - > -从内核代码中导出 > -------------- > -内核代码可以明确地管理那些已通过 gpio_request()申请的 GPIO 的导出: > - > - /* 导出 GPIO 到用户空间 */ > - int gpio_export(unsigned gpio, bool direction_may_change); > - > - /* gpio_export()的逆操作 */ > - void gpio_unexport(); > - > - /* 创建一个 sysfs 连接到已导出的 GPIO 节点 */ > - int gpio_export_link(struct device *dev, const char *name, > - unsigned gpio) > - > -在一个内核驱动申请一个 GPIO 之后,它可以通过 gpio_export()使其在 sysfs > -接口中可见。该驱动可以控制信号方向是否可修改。这有助于防止用户空间代码无意间 > -破坏重要的系统状态。 > - > -这个明确的导出有助于(通过使某些实验更容易来)调试,也可以提供一个始终存在的接口, > -与文档配合作为板级支持包的一部分。 > - > -在 GPIO 被导出之后,gpio_export_link()允许在 sysfs 文件系统的任何地方 > -创建一个到这个 GPIO sysfs 节点的符号链接。这样驱动就可以通过一个描述性的 > -名字,在 sysfs 中他们所拥有的设备下提供一个(到这个 GPIO sysfs 节点的)接口。 > diff --git a/Documentation/translations/zh_TW/gpio.txt b/Documentation/translations/zh_TW/gpio.txt > index e3c076dd75a5..c9bf3ddd08b3 100644 > --- a/Documentation/translations/zh_TW/gpio.txt > +++ b/Documentation/translations/zh_TW/gpio.txt > @@ -622,30 +622,3 @@ GPIO 控制器的路徑類似 /sys/class/gpio/gpiochip42/ (對於從#42 GPIO > 固定的,例如在擴展卡上的 GPIO會根據所使用的主板或所在堆疊架構中其他的板子而 > 有所不同。在這種情況下,你可能需要使用 gpiochip 節點(儘可能地結合電路圖)來 > 確定給定信號所用的 GPIO 編號。 > - > - > -從內核代碼中導出 > -------------- > -內核代碼可以明確地管理那些已通過 gpio_request()申請的 GPIO 的導出: > - > - /* 導出 GPIO 到用戶空間 */ > - int gpio_export(unsigned gpio, bool direction_may_change); > - > - /* gpio_export()的逆操作 */ > - void gpio_unexport(); > - > - /* 創建一個 sysfs 連接到已導出的 GPIO 節點 */ > - int gpio_export_link(struct device *dev, const char *name, > - unsigned gpio) > - > -在一個內核驅動申請一個 GPIO 之後,它可以通過 gpio_export()使其在 sysfs > -接口中可見。該驅動可以控制信號方向是否可修改。這有助於防止用戶空間代碼無意間 > -破壞重要的系統狀態。 > - > -這個明確的導出有助於(通過使某些實驗更容易來)調試,也可以提供一個始終存在的接口, > -與文檔配合作爲板級支持包的一部分。 > - > -在 GPIO 被導出之後,gpio_export_link()允許在 sysfs 文件系統的任何地方 > -創建一個到這個 GPIO sysfs 節點的符號連結。這樣驅動就可以通過一個描述性的 > -名字,在 sysfs 中他們所擁有的設備下提供一個(到這個 GPIO sysfs 節點的)接口。 > - > diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c > index ee91d81ebbfd..4a258e33021d 100644 > --- a/arch/arm/mach-davinci/board-dm646x-evm.c > +++ b/arch/arm/mach-davinci/board-dm646x-evm.c > @@ -19,7 +19,7 @@ > #include > #include > #include > -#include > +#include > #include > #include > #include > @@ -249,7 +249,7 @@ static int evm_led_teardown(struct i2c_client *client, int gpio, > return 0; > } > > -static int evm_sw_gpio[4] = { -EINVAL, -EINVAL, -EINVAL, -EINVAL }; > +static struct gpio_desc *evm_sw_gpio[4]; > > static int evm_sw_setup(struct i2c_client *client, int gpio, > unsigned ngpio, void *c) > @@ -259,17 +259,19 @@ static int evm_sw_setup(struct i2c_client *client, int gpio, > char label[10]; > > for (i = 0; i < 4; ++i) { > + struct gpio_desc *desc = gpio_to_desc(gpio + i); > + > snprintf(label, 10, "user_sw%d", i); > - status = gpio_request(gpio, label); > + status = gpio_request(gpio + i, label); Shouldn't be gpiod_get() or so at the end? > if (status) > goto out_free; > - evm_sw_gpio[i] = gpio++; > + evm_sw_gpio[i] = desc; > > - status = gpio_direction_input(evm_sw_gpio[i]); > + status = gpiod_direction_input(desc); > if (status) > goto out_free; > > - status = gpio_export(evm_sw_gpio[i], 0); > + status = gpiod_export(desc, 0); > if (status) > goto out_free; > } > @@ -277,9 +279,9 @@ static int evm_sw_setup(struct i2c_client *client, int gpio, > > out_free: > for (i = 0; i < 4; ++i) { > - if (evm_sw_gpio[i] != -EINVAL) { > - gpio_free(evm_sw_gpio[i]); > - evm_sw_gpio[i] = -EINVAL; > + if (evm_sw_gpio[i]) { > + gpio_free(pin + i); > + evm_sw_gpio[i] = NULL; > } > } > return status; > @@ -291,10 +293,10 @@ static int evm_sw_teardown(struct i2c_client *client, int gpio, > int i; > > for (i = 0; i < 4; ++i) { > - if (evm_sw_gpio[i] != -EINVAL) { > - gpio_unexport(evm_sw_gpio[i]); > - gpio_free(evm_sw_gpio[i]); > - evm_sw_gpio[i] = -EINVAL; > + if (evm_sw_gpio[i]) { > + gpiod_unexport(evm_sw_gpio[i]); > + gpio_free(gpio + i); > + evm_sw_gpio[i] = NULL; > } > } > return 0; > diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c > index e7fd29a502a0..1fdf7fcf091e 100644 > --- a/arch/arm/mach-omap2/pdata-quirks.c > +++ b/arch/arm/mach-omap2/pdata-quirks.c > @@ -6,6 +6,7 @@ > */ > #include > #include > +#include > #include > #include > #include > @@ -120,7 +121,7 @@ static int omap3_sbc_t3730_twl_callback(struct device *dev, > if (res) > return res; > > - gpio_export(gpio, 0); > + gpiod_export(gpio_to_desc(gpio), 0); > > return 0; > } > @@ -135,7 +136,7 @@ static void __init omap3_sbc_t3x_usb_hub_init(int gpio, char *hub_name) > return; > } > > - gpio_export(gpio, 0); > + gpiod_export(gpio_to_desc(gpio), 0); > > udelay(10); > gpio_set_value(gpio, 1); > @@ -212,8 +213,8 @@ static void __init omap3_sbc_t3517_wifi_init(void) > return; > } > > - gpio_export(cm_t3517_wlan_gpios[0].gpio, 0); > - gpio_export(cm_t3517_wlan_gpios[1].gpio, 0); > + gpiod_export(gpio_to_desc(cm_t3517_wlan_gpios[0].gpio), 0); > + gpiod_export(gpio_to_desc(cm_t3517_wlan_gpios[1].gpio), 0); > > msleep(100); > gpio_set_value(cm_t3517_wlan_gpios[1].gpio, 0); > diff --git a/arch/sh/boards/mach-ap325rxa/setup.c b/arch/sh/boards/mach-ap325rxa/setup.c > index c77b5f00a66a..151792162152 100644 > --- a/arch/sh/boards/mach-ap325rxa/setup.c > +++ b/arch/sh/boards/mach-ap325rxa/setup.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -411,16 +412,16 @@ static int __init ap325rxa_devices_setup(void) > /* LD3 and LD4 LEDs */ > gpio_request(GPIO_PTX5, NULL); /* RUN */ > gpio_direction_output(GPIO_PTX5, 1); > - gpio_export(GPIO_PTX5, 0); > + gpiod_export(gpio_to_desc(GPIO_PTX5), 0); > > gpio_request(GPIO_PTX4, NULL); /* INDICATOR */ > gpio_direction_output(GPIO_PTX4, 0); > - gpio_export(GPIO_PTX4, 0); > + gpiod_export(gpio_to_desc(GPIO_PTX4), 0); > > /* SW1 input */ > gpio_request(GPIO_PTF7, NULL); /* MODE */ > gpio_direction_input(GPIO_PTF7); > - gpio_export(GPIO_PTF7, 0); > + gpiod_export(gpio_to_desc(GPIO_PTF7), 0); > > /* LCDC */ > gpio_request(GPIO_FN_LCDD15, NULL); > diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c > index 4098bc7f88b7..a83fba3649c4 100644 > --- a/drivers/gpio/gpiolib-sysfs.c > +++ b/drivers/gpio/gpiolib-sysfs.c > @@ -511,7 +511,7 @@ static ssize_t unexport_store(struct class *class, > goto done; > > desc = gpio_to_desc(gpio); > - /* reject bogus commands (gpio_unexport ignores them) */ > + /* reject bogus commands (gpiod_unexport ignores them) */ > if (!desc) { > pr_warn("%s: invalid GPIO %ld\n", __func__, gpio); > return -EINVAL; > @@ -814,7 +814,7 @@ static int __init gpiolib_sysfs_init(void) > * early (e.g. before the class_register above was called). > * > * We run before arch_initcall() so chip->dev nodes can have > - * registered, and so arch_initcall() can always gpio_export(). > + * registered, and so arch_initcall() can always gpiod_export(). > */ > spin_lock_irqsave(&gpio_lock, flags); > list_for_each_entry(gdev, &gpio_devices, list) { > diff --git a/drivers/media/i2c/noon010pc30.c b/drivers/media/i2c/noon010pc30.c > index f3ac379ef34a..6faa44eb5354 100644 > --- a/drivers/media/i2c/noon010pc30.c > +++ b/drivers/media/i2c/noon010pc30.c > @@ -10,6 +10,7 @@ > */ > > #include > +#include > #include > #include > #include > @@ -755,7 +756,7 @@ static int noon010_probe(struct i2c_client *client, > goto np_err; > } > info->gpio_nreset = pdata->gpio_nreset; > - gpio_export(info->gpio_nreset, 0); > + gpiod_export(gpio_to_desc(info->gpio_nreset), 0); > } > > if (gpio_is_valid(pdata->gpio_nstby)) { > @@ -767,7 +768,7 @@ static int noon010_probe(struct i2c_client *client, > goto np_err; > } > info->gpio_nstby = pdata->gpio_nstby; > - gpio_export(info->gpio_nstby, 0); > + gpiod_export(gpio_to_desc(info->gpio_nstby), 0); > } > > for (i = 0; i < NOON010_NUM_SUPPLIES; i++) > diff --git a/drivers/media/i2c/ov9650.c b/drivers/media/i2c/ov9650.c > index c313e11a9754..021acd20ede2 100644 > --- a/drivers/media/i2c/ov9650.c > +++ b/drivers/media/i2c/ov9650.c > @@ -1426,9 +1426,9 @@ static int ov965x_configure_gpios_pdata(struct ov965x *ov965x, > return ret; > v4l2_dbg(1, debug, &ov965x->sd, "set gpio %d to 1\n", gpio); > > - gpio_set_value_cansleep(gpio, 1); > - gpio_export(gpio, 0); > ov965x->gpios[i] = gpio_to_desc(gpio); > + gpiod_set_value_cansleep(ov965x->gpios[i], 1); > + gpiod_export(ov965x->gpios[i], 0); > } > > return 0; > diff --git a/drivers/media/i2c/s5k4ecgx.c b/drivers/media/i2c/s5k4ecgx.c > index af9a305242cd..419d03fcc978 100644 > --- a/drivers/media/i2c/s5k4ecgx.c > +++ b/drivers/media/i2c/s5k4ecgx.c > @@ -15,6 +15,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -852,7 +853,7 @@ static int s5k4ecgx_config_gpio(int nr, int val, const char *name) > return 0; > ret = gpio_request_one(nr, flags, name); > if (!ret) > - gpio_export(nr, 0); > + gpiod_export(gpio_to_desc(nr), 0); > > return ret; > } > diff --git a/drivers/media/pci/sta2x11/sta2x11_vip.c b/drivers/media/pci/sta2x11/sta2x11_vip.c > index 524912f20d9f..f7cef598f21d 100644 > --- a/drivers/media/pci/sta2x11/sta2x11_vip.c > +++ b/drivers/media/pci/sta2x11/sta2x11_vip.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -893,6 +894,7 @@ static int sta2x11_vip_init_controls(struct sta2x11_vip *vip) > static int vip_gpio_reserve(struct device *dev, int pin, int dir, > const char *name) > { > + struct gpio_desc *desc = gpio_to_desc(pin); > int ret = -ENODEV; > > if (!gpio_is_valid(pin)) > @@ -904,7 +906,7 @@ static int vip_gpio_reserve(struct device *dev, int pin, int dir, > return ret; > } > > - ret = gpio_direction_output(pin, dir); > + ret = gpiod_direction_output(desc, dir); > if (ret) { > dev_err(dev, "Failed to set direction for pin %d (%s)\n", > pin, name); > @@ -912,7 +914,7 @@ static int vip_gpio_reserve(struct device *dev, int pin, int dir, > return ret; > } > > - ret = gpio_export(pin, false); > + ret = gpiod_export(desc, false); > if (ret) { > dev_err(dev, "Failed to export pin %d (%s)\n", pin, name); > gpio_free(pin); > @@ -932,8 +934,10 @@ static int vip_gpio_reserve(struct device *dev, int pin, int dir, > static void vip_gpio_release(struct device *dev, int pin, const char *name) > { > if (gpio_is_valid(pin)) { > + struct gpio_desc *desc = gpio_to_desc(pin); > + > dev_dbg(dev, "releasing pin %d (%s)\n", pin, name); > - gpio_unexport(pin); > + gpiod_unexport(desc); > gpio_free(pin); > } > } > diff --git a/drivers/mfd/dm355evm_msp.c b/drivers/mfd/dm355evm_msp.c > index 54fb6cbd2aa0..2388fb4d0121 100644 > --- a/drivers/mfd/dm355evm_msp.c > +++ b/drivers/mfd/dm355evm_msp.c > @@ -11,6 +11,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -329,7 +330,7 @@ static int add_children(struct i2c_client *client) > gpio_request_one(gpio, GPIOF_IN, config_inputs[i].label); > > /* make it easy for userspace to see these */ > - gpio_export(gpio, false); > + gpiod_export(gpio_to_desc(gpio), false); > } > > /* MMC/SD inputs -- right after the last config input */ > diff --git a/drivers/net/ieee802154/ca8210.c b/drivers/net/ieee802154/ca8210.c > index ece6ff6049f6..6252907b2c92 100644 > --- a/drivers/net/ieee802154/ca8210.c > +++ b/drivers/net/ieee802154/ca8210.c > @@ -51,6 +51,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -2895,7 +2896,7 @@ static int ca8210_interrupt_init(struct spi_device *spi) > ); > if (ret) { > dev_crit(&spi->dev, "request_irq %d failed\n", pdata->irq_id); > - gpio_unexport(pdata->gpio_irq); > + gpiod_unexport(gpio_to_desc(pdata->gpio_irq)); > gpio_free(pdata->gpio_irq); > } > > diff --git a/include/linux/gpio.h b/include/linux/gpio.h > index 64cc8f09eba8..7ceb93678689 100644 > --- a/include/linux/gpio.h > +++ b/include/linux/gpio.h > @@ -144,26 +144,6 @@ extern int gpio_request_one(unsigned gpio, unsigned long flags, const char *labe > extern int gpio_request_array(const struct gpio *array, size_t num); > extern void gpio_free_array(const struct gpio *array, size_t num); > > -/* > - * A sysfs interface can be exported by individual drivers if they want, > - * but more typically is configured entirely from userspace. > - */ > -static inline int gpio_export(unsigned gpio, bool direction_may_change) > -{ > - return gpiod_export(gpio_to_desc(gpio), direction_may_change); > -} > - > -static inline int gpio_export_link(struct device *dev, const char *name, > - unsigned gpio) > -{ > - return gpiod_export_link(dev, name, gpio_to_desc(gpio)); > -} > - > -static inline void gpio_unexport(unsigned gpio) > -{ > - gpiod_unexport(gpio_to_desc(gpio)); > -} > - > /* CONFIG_GPIOLIB: bindings for managed devices that want to request gpios */ > > struct device; > @@ -253,27 +233,6 @@ static inline void gpio_set_value_cansleep(unsigned gpio, int value) > WARN_ON(1); > } > > -static inline int gpio_export(unsigned gpio, bool direction_may_change) > -{ > - /* GPIO can never have been requested or set as {in,out}put */ > - WARN_ON(1); > - return -EINVAL; > -} > - > -static inline int gpio_export_link(struct device *dev, const char *name, > - unsigned gpio) > -{ > - /* GPIO can never have been exported */ > - WARN_ON(1); > - return -EINVAL; > -} > - > -static inline void gpio_unexport(unsigned gpio) > -{ > - /* GPIO can never have been exported */ > - WARN_ON(1); > -} > - > static inline int gpio_to_irq(unsigned gpio) > { > /* GPIO can never have been requested or set as input */ > -- > 2.29.2 > -- With Best Regards, Andy Shevchenko From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0E1EDC433EF for ; Tue, 9 Nov 2021 10:32:56 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CB347610F8 for ; Tue, 9 Nov 2021 10:32:55 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org CB347610F8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=eBS3jVBGAbdlOjNTCg6pZ+fxstEGekwPxzeq+IywfNE=; b=3R84E1db5ncMY3 pcwCD4ImBkWcamx7ry8JVazvIBaZZWaKUPMUhF/tREHLv2T0E3TRDCr2PXIPdqaglKZ90vc+0rxQ5 /O07wOwJqQB80P4ezYHoNGZ8qpJAOnR41uYOSoGc1HQUqwJlz485YXJuKei7ZYpYvCEhW9GXxQauO x783epdXMKn9/KY4SMd/Vv4Rtn2CqeR7auZ9qMQhAn/d0NDvYizg/Zq4Z8eKkRw6UWpJdLmaFIRv0 2IJFQDQIjSSzZMbBPC3zJe5fFhuqDjDrfacndIf9hj98ET4i2d5Ka1xEzdd91cxtzFnbsIW+ZAWJJ dud3WNxt9nE+1D9P81wA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mkOPN-001XqS-OQ; Tue, 09 Nov 2021 10:31:18 +0000 Received: from mga14.intel.com ([192.55.52.115]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mkOPE-001Xon-M0 for linux-arm-kernel@lists.infradead.org; Tue, 09 Nov 2021 10:31:11 +0000 X-IronPort-AV: E=McAfee;i="6200,9189,10162"; a="232665183" X-IronPort-AV: E=Sophos;i="5.87,220,1631602800"; d="scan'208";a="232665183" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Nov 2021 02:31:07 -0800 X-IronPort-AV: E=Sophos;i="5.87,220,1631602800"; d="scan'208";a="545265484" Received: from smile.fi.intel.com ([10.237.72.184]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Nov 2021 02:31:05 -0800 Received: from andy by smile.fi.intel.com with local (Exim 4.95) (envelope-from ) id 1mkOOz-00538N-4d; Tue, 09 Nov 2021 12:30:53 +0200 Date: Tue, 9 Nov 2021 12:30:52 +0200 From: Andy Shevchenko To: Arnd Bergmann Cc: linux-gpio@vger.kernel.org, Arnd Bergmann , Linus Walleij , Bartosz Golaszewski , Geert Uytterhoeven , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 6/8] gpiolib: remove legacy gpio_export Message-ID: References: <20211109100207.2474024-1-arnd@kernel.org> <20211109100207.2474024-7-arnd@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20211109100207.2474024-7-arnd@kernel.org> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211109_023108_809856_3887C39E X-CRM114-Status: GOOD ( 37.85 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVHVlLCBOb3YgMDksIDIwMjEgYXQgMTE6MDI6MDVBTSArMDEwMCwgQXJuZCBCZXJnbWFubiB3 cm90ZToKPiBGcm9tOiBBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgo+IAo+IFRoZXJlIGFy ZSBvbmx5IGEgaGFuZGZ1bCBvZiB1c2VycyBvZiBncGlvX2V4cG9ydCgpIGFuZAo+IHJlbGF0ZWQg ZnVuY3Rpb25zLgo+IAo+IEFzIHRoZXNlIGFyZSBqdXN0IHdyYXBwZXJzIGFyb3VuZCB0aGUgbW9k ZXJuIGdwaW9kX2V4cG9ydCgpCj4gaGVscGVyLCByZW1vdmUgdGhlIHdyYXBwZXJzIGFuZCBvcGVu LWNvZGUgdGhlIGdwaW9fdG9fZGVzYwo+IGluIGFsbCBjYWxsZXJzIHRvIHNocmluayB0aGUgbGVn YWN5IEFQSS4KClJldmlld2VkLWJ5OiBBbmR5IFNoZXZjaGVua28gPGFuZHJpeS5zaGV2Y2hlbmtv QGxpbnV4LmludGVsLmNvbT4KCldoYXQgSSB3aXNoIHRvIHNlZSBtZWFud2hpbGUgaXMgYSBzZWN0 aW9uIGluIHRoZSBUT0RPIGxpc3Qgc29tZXdoZXJlIHRvIGNsZWFuCnVwIHRob3NlIG1vZHVsZXMg dGhhdCBoYXZlIGdwaW8uaC4gTGludXMsIGRvIHdlIGhhdmUgb25lIGluIHRoZSBrZXJuZWwgb3Ig aXMKaXQgeW91ciBwZXJzb25hbCBUT0RPPwoKSW4gY2FzZSB3ZSBoYXZlIG9uZSBpbiB0aGUga2Vy bmVsLCBwbGVhc2UgYWRkIHRoZXJlIG1vZHVsZXMgeW91IG1vZGlmaWVkIGluCmEgd2F5IHRoYXQg dGhleSBzdGlsbCBuZWVkIGZ1cnRoZXIgYXR0ZW50aW9uLgoKPiBTaWduZWQtb2ZmLWJ5OiBBcm5k IEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgo+IC0tLQo+ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1 aWRlL2dwaW8vc3lzZnMucnN0ICB8ICAyICstCj4gIERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9n cGlvL2xlZ2FjeS5yc3QgIHwgMzAgLS0tLS0tLS0tLS0tLS0tLS0KPiAgRG9jdW1lbnRhdGlvbi90 cmFuc2xhdGlvbnMvemhfQ04vZ3Bpby50eHQgfCAyNiAtLS0tLS0tLS0tLS0tLQo+ICBEb2N1bWVu dGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9ncGlvLnR4dCB8IDI3IC0tLS0tLS0tLS0tLS0tLQo+ ICBhcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDZ4LWV2bS5jICB8IDI4ICsrKysrKysr Ky0tLS0tLS0KPiAgYXJjaC9hcm0vbWFjaC1vbWFwMi9wZGF0YS1xdWlya3MuYyAgICAgICAgfCAg OSArKy0tLQo+ICBhcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMgICAgICB8ICA3 ICsrLS0KPiAgZHJpdmVycy9ncGlvL2dwaW9saWItc3lzZnMuYyAgICAgICAgICAgICAgfCAgNCAr LS0KPiAgZHJpdmVycy9tZWRpYS9pMmMvbm9vbjAxMHBjMzAuYyAgICAgICAgICAgfCAgNSArLS0K PiAgZHJpdmVycy9tZWRpYS9pMmMvb3Y5NjUwLmMgICAgICAgICAgICAgICAgfCAgNCArLS0KPiAg ZHJpdmVycy9tZWRpYS9pMmMvczVrNGVjZ3guYyAgICAgICAgICAgICAgfCAgMyArLQo+ICBkcml2 ZXJzL21lZGlhL3BjaS9zdGEyeDExL3N0YTJ4MTFfdmlwLmMgICB8IDEwICsrKystLQo+ICBkcml2 ZXJzL21mZC9kbTM1NWV2bV9tc3AuYyAgICAgICAgICAgICAgICB8ICAzICstCj4gIGRyaXZlcnMv bmV0L2llZWU4MDIxNTQvY2E4MjEwLmMgICAgICAgICAgIHwgIDMgKy0KPiAgaW5jbHVkZS9saW51 eC9ncGlvLmggICAgICAgICAgICAgICAgICAgICAgfCA0MSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQo+ICAxNSBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAxNTcgZGVsZXRpb25zKC0p Cj4gCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZ3Bpby9zeXNmcy5y c3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2dwaW8vc3lzZnMucnN0Cj4gaW5kZXggZWMw OWZmZDk4M2U3Li4zNTE3MWQxNWY3OGQgMTAwNjQ0Cj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1p bi1ndWlkZS9ncGlvL3N5c2ZzLnJzdAo+ICsrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUv Z3Bpby9zeXNmcy5yc3QKPiBAQCAtMTQ1LDcgKzE0NSw3IEBAIHJlcXVlc3RlZCB1c2luZyBncGlv X3JlcXVlc3QoKTo6Cj4gIAkvKiBleHBvcnQgdGhlIEdQSU8gdG8gdXNlcnNwYWNlICovCj4gIAlp bnQgZ3Bpb2RfZXhwb3J0KHN0cnVjdCBncGlvX2Rlc2MgKmRlc2MsIGJvb2wgZGlyZWN0aW9uX21h eV9jaGFuZ2UpOwo+ICAKPiAtCS8qIHJldmVyc2UgZ3Bpb19leHBvcnQoKSAqLwo+ICsJLyogcmV2 ZXJzZSBncGlvZF9leHBvcnQoKSAqLwo+ICAJdm9pZCBncGlvZF91bmV4cG9ydChzdHJ1Y3QgZ3Bp b19kZXNjICpkZXNjKTsKPiAgCj4gIAkvKiBjcmVhdGUgYSBzeXNmcyBsaW5rIHRvIGFuIGV4cG9y dGVkIEdQSU8gbm9kZSAqLwo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkv Z3Bpby9sZWdhY3kucnN0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2dwaW8vbGVnYWN5LnJz dAo+IGluZGV4IGVhZTE4NWY3NzFkNy4uMzRmY2IxNDgxNGRiIDEwMDY0NAo+IC0tLSBhL0RvY3Vt ZW50YXRpb24vZHJpdmVyLWFwaS9ncGlvL2xlZ2FjeS5yc3QKPiArKysgYi9Eb2N1bWVudGF0aW9u L2RyaXZlci1hcGkvZ3Bpby9sZWdhY3kucnN0Cj4gQEAgLTcxNywzNiArNzE3LDYgQEAgZ3Bpb2No aXAgbm9kZXMgKHBvc3NpYmx5IGluIGNvbmp1bmN0aW9uIHdpdGggc2NoZW1hdGljcykgdG8gZGV0 ZXJtaW5lCj4gIHRoZSBjb3JyZWN0IEdQSU8gbnVtYmVyIHRvIHVzZSBmb3IgYSBnaXZlbiBzaWdu YWwuCj4gIAo+ICAKPiAtRXhwb3J0aW5nIGZyb20gS2VybmVsIGNvZGUKPiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KPiAtS2VybmVsIGNvZGUgY2FuIGV4cGxpY2l0bHkgbWFuYWdlIGV4cG9y dHMgb2YgR1BJT3Mgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4KPiAtcmVxdWVzdGVkIHVzaW5nIGdw aW9fcmVxdWVzdCgpOjoKPiAtCj4gLQkvKiBleHBvcnQgdGhlIEdQSU8gdG8gdXNlcnNwYWNlICov Cj4gLQlpbnQgZ3Bpb19leHBvcnQodW5zaWduZWQgZ3BpbywgYm9vbCBkaXJlY3Rpb25fbWF5X2No YW5nZSk7Cj4gLQo+IC0JLyogcmV2ZXJzZSBncGlvX2V4cG9ydCgpICovCj4gLQl2b2lkIGdwaW9f dW5leHBvcnQoKTsKPiAtCj4gLQkvKiBjcmVhdGUgYSBzeXNmcyBsaW5rIHRvIGFuIGV4cG9ydGVk IEdQSU8gbm9kZSAqLwo+IC0JaW50IGdwaW9fZXhwb3J0X2xpbmsoc3RydWN0IGRldmljZSAqZGV2 LCBjb25zdCBjaGFyICpuYW1lLAo+IC0JCXVuc2lnbmVkIGdwaW8pCj4gLQo+IC1BZnRlciBhIGtl cm5lbCBkcml2ZXIgcmVxdWVzdHMgYSBHUElPLCBpdCBtYXkgb25seSBiZSBtYWRlIGF2YWlsYWJs ZSBpbgo+IC10aGUgc3lzZnMgaW50ZXJmYWNlIGJ5IGdwaW9fZXhwb3J0KCkuICBUaGUgZHJpdmVy IGNhbiBjb250cm9sIHdoZXRoZXIgdGhlCj4gLXNpZ25hbCBkaXJlY3Rpb24gbWF5IGNoYW5nZS4g IFRoaXMgaGVscHMgZHJpdmVycyBwcmV2ZW50IHVzZXJzcGFjZSBjb2RlCj4gLWZyb20gYWNjaWRl bnRhbGx5IGNsb2JiZXJpbmcgaW1wb3J0YW50IHN5c3RlbSBzdGF0ZS4KPiAtCj4gLVRoaXMgZXhw bGljaXQgZXhwb3J0aW5nIGNhbiBoZWxwIHdpdGggZGVidWdnaW5nIChieSBtYWtpbmcgc29tZSBr aW5kcwo+IC1vZiBleHBlcmltZW50cyBlYXNpZXIpLCBvciBjYW4gcHJvdmlkZSBhbiBhbHdheXMt dGhlcmUgaW50ZXJmYWNlIHRoYXQncwo+IC1zdWl0YWJsZSBmb3IgZG9jdW1lbnRpbmcgYXMgcGFy dCBvZiBhIGJvYXJkIHN1cHBvcnQgcGFja2FnZS4KPiAtCj4gLUFmdGVyIHRoZSBHUElPIGhhcyBi ZWVuIGV4cG9ydGVkLCBncGlvX2V4cG9ydF9saW5rKCkgYWxsb3dzIGNyZWF0aW5nCj4gLXN5bWxp bmtzIGZyb20gZWxzZXdoZXJlIGluIHN5c2ZzIHRvIHRoZSBHUElPIHN5c2ZzIG5vZGUuICBEcml2 ZXJzIGNhbgo+IC11c2UgdGhpcyB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2UgdW5kZXIgdGhlaXIg b3duIGRldmljZSBpbiBzeXNmcyB3aXRoCj4gLWEgZGVzY3JpcHRpdmUgbmFtZS4KPiAtCj4gLQo+ ICBBUEkgUmVmZXJlbmNlCj4gID09PT09PT09PT09PT0KPiAgCj4gZGlmZiAtLWdpdCBhL0RvY3Vt ZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2dwaW8udHh0IGIvRG9jdW1lbnRhdGlvbi90cmFu c2xhdGlvbnMvemhfQ04vZ3Bpby50eHQKPiBpbmRleCBhMjNlZTE0ZmM5MjcuLmU0OWZhODhhMjgw NCAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ncGlvLnR4 dAo+ICsrKyBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2dwaW8udHh0Cj4gQEAg LTYyMiwyOSArNjIyLDMgQEAgR1BJTyDmjqfliLblmajnmoTot6/lvoTnsbvkvLwgL3N5cy9jbGFz cy9ncGlvL2dwaW9jaGlwNDIvICjlr7nkuo7ku44jNDIgR1BJTwo+ICDlm7rlrprnmoQs5L6L5aaC 5Zyo5omp5bGV5Y2h5LiK55qEIEdQSU/kvJrmoLnmja7miYDkvb/nlKjnmoTkuLvmnb/miJbmiYDl nKjloIblj6DmnrbmnoTkuK3lhbbku5bnmoTmnb/lrZDogIwKPiAg5pyJ5omA5LiN5ZCM44CC5Zyo 6L+Z56eN5oOF5Ya15LiLLOS9oOWPr+iDvemcgOimgeS9v+eUqCBncGlvY2hpcCDoioLngrko5bC9 5Y+v6IO95Zyw57uT5ZCI55S16Lev5Zu+KeadpQo+ICDnoa7lrprnu5nlrprkv6Hlj7fmiYDnlKjn moQgR1BJTyDnvJblj7fjgIIKPiAtCj4gLQo+IC3ku47lhoXmoLjku6PnoIHkuK3lr7zlh7oKPiAt LS0tLS0tLS0tLS0tLQo+IC3lhoXmoLjku6PnoIHlj6/ku6XmmI7noa7lnLDnrqHnkIbpgqPkupvl t7LpgJrov4cgZ3Bpb19yZXF1ZXN0KCnnlLPor7fnmoQgR1BJTyDnmoTlr7zlh7o6Cj4gLQo+IC0J Lyog5a+85Ye6IEdQSU8g5Yiw55So5oi356m66Ze0ICovCj4gLQlpbnQgZ3Bpb19leHBvcnQodW5z aWduZWQgZ3BpbywgYm9vbCBkaXJlY3Rpb25fbWF5X2NoYW5nZSk7Cj4gLQo+IC0JLyogZ3Bpb19l eHBvcnQoKeeahOmAhuaTjeS9nCAqLwo+IC0Jdm9pZCBncGlvX3VuZXhwb3J0KCk7Cj4gLQo+IC0J Lyog5Yib5bu65LiA5LiqIHN5c2ZzIOi/nuaOpeWIsOW3suWvvOWHuueahCBHUElPIOiKgueCuSAq Lwo+IC0JaW50IGdwaW9fZXhwb3J0X2xpbmsoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFy ICpuYW1lLAo+IC0JCXVuc2lnbmVkIGdwaW8pCj4gLQo+IC3lnKjkuIDkuKrlhoXmoLjpqbHliqjn lLPor7fkuIDkuKogR1BJTyDkuYvlkI7vvIzlroPlj6/ku6XpgJrov4cgZ3Bpb19leHBvcnQoKeS9 v+WFtuWcqCBzeXNmcwo+IC3mjqXlj6PkuK3lj6/op4HjgILor6XpqbHliqjlj6/ku6XmjqfliLbk v6Hlj7fmlrnlkJHmmK/lkKblj6/kv67mlLnjgILov5nmnInliqnkuo7pmLLmraLnlKjmiLfnqbrp l7Tku6PnoIHml6DmhI/pl7QKPiAt56C05Z2P6YeN6KaB55qE57O757uf54q25oCB44CCCj4gLQo+ IC3ov5nkuKrmmI7noa7nmoTlr7zlh7rmnInliqnkuo4o6YCa6L+H5L2/5p+Q5Lqb5a6e6aqM5pu0 5a655piT5p2lKeiwg+ivle+8jOS5n+WPr+S7peaPkOS+m+S4gOS4quWni+e7iOWtmOWcqOeahOaO peWPo++8jAo+IC3kuI7mlofmoaPphY3lkIjkvZzkuLrmnb/nuqfmlK/mjIHljIXnmoTkuIDpg6jl iIbjgIIKPiAtCj4gLeWcqCBHUElPIOiiq+WvvOWHuuS5i+WQju+8jGdwaW9fZXhwb3J0X2xpbmso KeWFgeiuuOWcqCBzeXNmcyDmlofku7bns7vnu5/nmoTku7vkvZXlnLDmlrkKPiAt5Yib5bu65LiA 5Liq5Yiw6L+Z5LiqIEdQSU8gc3lzZnMg6IqC54K555qE56ym5Y+36ZO+5o6l44CC6L+Z5qC36amx 5Yqo5bCx5Y+v5Lul6YCa6L+H5LiA5Liq5o+P6L+w5oCn55qECj4gLeWQjeWtl++8jOWcqCBzeXNm cyDkuK3ku5bku6zmiYDmi6XmnInnmoTorr7lpIfkuIvmj5DkvpvkuIDkuKoo5Yiw6L+Z5LiqIEdQ SU8gc3lzZnMg6IqC54K555qEKeaOpeWPo+OAggo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9u L3RyYW5zbGF0aW9ucy96aF9UVy9ncGlvLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25z L3poX1RXL2dwaW8udHh0Cj4gaW5kZXggZTNjMDc2ZGQ3NWE1Li5jOWJmM2RkZDA4YjMgMTAwNjQ0 Cj4gLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvZ3Bpby50eHQKPiArKysg Yi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9ncGlvLnR4dAo+IEBAIC02MjIsMzAg KzYyMiwzIEBAIEdQSU8g5o6n5Yi25Zmo55qE6Lev5b6R6aGe5Ly8IC9zeXMvY2xhc3MvZ3Bpby9n cGlvY2hpcDQyLyAo5bCN5pa85b6eIzQyIEdQSU8KPiAg5Zu65a6a55qELOS+i+WmguWcqOaTtOWx leWNoeS4iueahCBHUElP5pyD5qC55pOa5omA5L2/55So55qE5Li75p2/5oiW5omA5Zyo5aCG55aK 5p625qeL5Lit5YW25LuW55qE5p2/5a2Q6ICMCj4gIOacieaJgOS4jeWQjOOAguWcqOmAmeeoruaD heazgeS4iyzkvaDlj6/og73pnIDopoHkvb/nlKggZ3Bpb2NoaXAg56+A6bueKOWEmOWPr+iDveWc sOe1kOWQiOmbu+i3r+WclinkvoYKPiAg56K65a6a57Wm5a6a5L+h6Jmf5omA55So55qEIEdQSU8g 57eo6Jmf44CCCj4gLQo+IC0KPiAt5b6e5YWn5qC45Luj56K85Lit5bCO5Ye6Cj4gLS0tLS0tLS0t LS0tLS0KPiAt5YWn5qC45Luj56K85Y+v5Lul5piO56K65Zyw566h55CG6YKj5Lqb5bey6YCa6YGO IGdwaW9fcmVxdWVzdCgp55Sz6KuL55qEIEdQSU8g55qE5bCO5Ye6Ogo+IC0KPiAtCS8qIOWwjuWH uiBHUElPIOWIsOeUqOaItuepuumWkyAqLwo+IC0JaW50IGdwaW9fZXhwb3J0KHVuc2lnbmVkIGdw aW8sIGJvb2wgZGlyZWN0aW9uX21heV9jaGFuZ2UpOwo+IC0KPiAtCS8qIGdwaW9fZXhwb3J0KCnn moTpgIbmk43kvZwgKi8KPiAtCXZvaWQgZ3Bpb191bmV4cG9ydCgpOwo+IC0KPiAtCS8qIOWJteW7 uuS4gOWAiyBzeXNmcyDpgKPmjqXliLDlt7LlsI7lh7rnmoQgR1BJTyDnr4Dpu54gKi8KPiAtCWlu dCBncGlvX2V4cG9ydF9saW5rKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwK PiAtCQl1bnNpZ25lZCBncGlvKQo+IC0KPiAt5Zyo5LiA5YCL5YWn5qC46amF5YuV55Sz6KuL5LiA 5YCLIEdQSU8g5LmL5b6M77yM5a6D5Y+v5Lul6YCa6YGOIGdwaW9fZXhwb3J0KCnkvb/lhbblnKgg c3lzZnMKPiAt5o6l5Y+j5Lit5Y+v6KaL44CC6Kmy6amF5YuV5Y+v5Lul5o6n5Yi25L+h6Jmf5pa5 5ZCR5piv5ZCm5Y+v5L+u5pS544CC6YCZ5pyJ5Yqp5pa86Ziy5q2i55So5oi256m66ZaT5Luj56K8 54Sh5oSP6ZaTCj4gLeegtOWjnumHjeimgeeahOezu+e1seeLgOaFi+OAggo+IC0KPiAt6YCZ5YCL 5piO56K655qE5bCO5Ye65pyJ5Yqp5pa8KOmAmumBjuS9v+afkOS6m+Wvpumpl+abtOWuueaYk+S+ hinoqr/oqabvvIzkuZ/lj6/ku6Xmj5DkvpvkuIDlgIvlp4vntYLlrZjlnKjnmoTmjqXlj6PvvIwK PiAt6IiH5paH5qqU6YWN5ZCI5L2c54iy5p2/57Sa5pSv5oyB5YyF55qE5LiA6YOo5YiG44CCCj4g LQo+IC3lnKggR1BJTyDooqvlsI7lh7rkuYvlvozvvIxncGlvX2V4cG9ydF9saW5rKCnlhYHoqLHl nKggc3lzZnMg5paH5Lu257O757Wx55qE5Lu75L2V5Zyw5pa5Cj4gLeWJteW7uuS4gOWAi+WIsOmA meWAiyBHUElPIHN5c2ZzIOevgOm7nueahOespuiZn+mAo+e1kOOAgumAmeaoo+mpheWLleWwseWP r+S7pemAmumBjuS4gOWAi+aPj+i/sOaAp+eahAo+IC3lkI3lrZfvvIzlnKggc3lzZnMg5Lit5LuW 5YCR5omA5pOB5pyJ55qE6Kit5YKZ5LiL5o+Q5L6b5LiA5YCLKOWIsOmAmeWAiyBHUElPIHN5c2Zz IOevgOm7nueahCnmjqXlj6PjgIIKPiAtCj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2 aW5jaS9ib2FyZC1kbTY0NngtZXZtLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02 NDZ4LWV2bS5jCj4gaW5kZXggZWU5MWQ4MWViYmZkLi40YTI1OGUzMzAyMWQgMTAwNjQ0Cj4gLS0t IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtNjQ2eC1ldm0uYwo+ICsrKyBiL2FyY2gv YXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTY0NngtZXZtLmMKPiBAQCAtMTksNyArMTksNyBAQAo+ ICAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4g ICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ICAjaW5jbHVkZSA8bGludXgv cHJvcGVydHkuaD4KPiBAQCAtMjQ5LDcgKzI0OSw3IEBAIHN0YXRpYyBpbnQgZXZtX2xlZF90ZWFy ZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZ3BpbywKPiAgCXJldHVybiAwOwo+ ICB9Cj4gIAo+IC1zdGF0aWMgaW50IGV2bV9zd19ncGlvWzRdID0geyAtRUlOVkFMLCAtRUlOVkFM LCAtRUlOVkFMLCAtRUlOVkFMIH07Cj4gK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19kZXNjICpldm1fc3df Z3Bpb1s0XTsKPiAgCj4gIHN0YXRpYyBpbnQgZXZtX3N3X3NldHVwKHN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQsIGludCBncGlvLAo+ICAJCQl1bnNpZ25lZCBuZ3Bpbywgdm9pZCAqYykKPiBAQCAt MjU5LDE3ICsyNTksMTkgQEAgc3RhdGljIGludCBldm1fc3dfc2V0dXAoc3RydWN0IGkyY19jbGll bnQgKmNsaWVudCwgaW50IGdwaW8sCj4gIAljaGFyIGxhYmVsWzEwXTsKPiAgCj4gIAlmb3IgKGkg PSAwOyBpIDwgNDsgKytpKSB7Cj4gKwkJc3RydWN0IGdwaW9fZGVzYyAqZGVzYyA9IGdwaW9fdG9f ZGVzYyhncGlvICsgaSk7Cj4gKwo+ICAJCXNucHJpbnRmKGxhYmVsLCAxMCwgInVzZXJfc3clZCIs IGkpOwo+IC0JCXN0YXR1cyA9IGdwaW9fcmVxdWVzdChncGlvLCBsYWJlbCk7Cj4gKwkJc3RhdHVz ID0gZ3Bpb19yZXF1ZXN0KGdwaW8gKyBpLCBsYWJlbCk7CgpTaG91bGRuJ3QgYmUgZ3Bpb2RfZ2V0 KCkgb3Igc28gYXQgdGhlIGVuZD8KCj4gIAkJaWYgKHN0YXR1cykKPiAgCQkJZ290byBvdXRfZnJl ZTsKPiAtCQlldm1fc3dfZ3Bpb1tpXSA9IGdwaW8rKzsKPiArCQlldm1fc3dfZ3Bpb1tpXSA9IGRl c2M7Cj4gIAo+IC0JCXN0YXR1cyA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KGV2bV9zd19ncGlvW2ld KTsKPiArCQlzdGF0dXMgPSBncGlvZF9kaXJlY3Rpb25faW5wdXQoZGVzYyk7Cj4gIAkJaWYgKHN0 YXR1cykKPiAgCQkJZ290byBvdXRfZnJlZTsKPiAgCj4gLQkJc3RhdHVzID0gZ3Bpb19leHBvcnQo ZXZtX3N3X2dwaW9baV0sIDApOwo+ICsJCXN0YXR1cyA9IGdwaW9kX2V4cG9ydChkZXNjLCAwKTsK PiAgCQlpZiAoc3RhdHVzKQo+ICAJCQlnb3RvIG91dF9mcmVlOwo+ICAJfQo+IEBAIC0yNzcsOSAr Mjc5LDkgQEAgc3RhdGljIGludCBldm1fc3dfc2V0dXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVu dCwgaW50IGdwaW8sCj4gIAo+ICBvdXRfZnJlZToKPiAgCWZvciAoaSA9IDA7IGkgPCA0OyArK2kp IHsKPiAtCQlpZiAoZXZtX3N3X2dwaW9baV0gIT0gLUVJTlZBTCkgewo+IC0JCQlncGlvX2ZyZWUo ZXZtX3N3X2dwaW9baV0pOwo+IC0JCQlldm1fc3dfZ3Bpb1tpXSA9IC1FSU5WQUw7Cj4gKwkJaWYg KGV2bV9zd19ncGlvW2ldKSB7Cj4gKwkJCWdwaW9fZnJlZShwaW4gKyBpKTsKPiArCQkJZXZtX3N3 X2dwaW9baV0gPSBOVUxMOwo+ICAJCX0KPiAgCX0KPiAgCXJldHVybiBzdGF0dXM7Cj4gQEAgLTI5 MSwxMCArMjkzLDEwIEBAIHN0YXRpYyBpbnQgZXZtX3N3X3RlYXJkb3duKHN0cnVjdCBpMmNfY2xp ZW50ICpjbGllbnQsIGludCBncGlvLAo+ICAJaW50IGk7Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8 IDQ7ICsraSkgewo+IC0JCWlmIChldm1fc3dfZ3Bpb1tpXSAhPSAtRUlOVkFMKSB7Cj4gLQkJCWdw aW9fdW5leHBvcnQoZXZtX3N3X2dwaW9baV0pOwo+IC0JCQlncGlvX2ZyZWUoZXZtX3N3X2dwaW9b aV0pOwo+IC0JCQlldm1fc3dfZ3Bpb1tpXSA9IC1FSU5WQUw7Cj4gKwkJaWYgKGV2bV9zd19ncGlv W2ldKSB7Cj4gKwkJCWdwaW9kX3VuZXhwb3J0KGV2bV9zd19ncGlvW2ldKTsKPiArCQkJZ3Bpb19m cmVlKGdwaW8gKyBpKTsKPiArCQkJZXZtX3N3X2dwaW9baV0gPSBOVUxMOwo+ICAJCX0KPiAgCX0K PiAgCXJldHVybiAwOwo+IGRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BkYXRhLXF1 aXJrcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wZGF0YS1xdWlya3MuYwo+IGluZGV4IGU3ZmQy OWE1MDJhMC4uMWZkZjdmY2YwOTFlIDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIv cGRhdGEtcXVpcmtzLmMKPiArKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BkYXRhLXF1aXJrcy5j Cj4gQEAgLTYsNiArNiw3IEBACj4gICAqLwo+ICAjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gICNp bmNsdWRlIDxsaW51eC9kYXZpbmNpX2VtYWMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29u c3VtZXIuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2lu aXQuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+IEBAIC0xMjAsNyArMTIxLDcgQEAg c3RhdGljIGludCBvbWFwM19zYmNfdDM3MzBfdHdsX2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRl diwKPiAgCWlmIChyZXMpCj4gIAkJcmV0dXJuIHJlczsKPiAgCj4gLQlncGlvX2V4cG9ydChncGlv LCAwKTsKPiArCWdwaW9kX2V4cG9ydChncGlvX3RvX2Rlc2MoZ3BpbyksIDApOwo+ICAKPiAgCXJl dHVybiAwOwo+ICB9Cj4gQEAgLTEzNSw3ICsxMzYsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgb21h cDNfc2JjX3QzeF91c2JfaHViX2luaXQoaW50IGdwaW8sIGNoYXIgKmh1Yl9uYW1lKQo+ICAJCXJl dHVybjsKPiAgCX0KPiAgCj4gLQlncGlvX2V4cG9ydChncGlvLCAwKTsKPiArCWdwaW9kX2V4cG9y dChncGlvX3RvX2Rlc2MoZ3BpbyksIDApOwo+ICAKPiAgCXVkZWxheSgxMCk7Cj4gIAlncGlvX3Nl dF92YWx1ZShncGlvLCAxKTsKPiBAQCAtMjEyLDggKzIxMyw4IEBAIHN0YXRpYyB2b2lkIF9faW5p dCBvbWFwM19zYmNfdDM1MTdfd2lmaV9pbml0KHZvaWQpCj4gIAkJcmV0dXJuOwo+ICAJfQo+ICAK PiAtCWdwaW9fZXhwb3J0KGNtX3QzNTE3X3dsYW5fZ3Bpb3NbMF0uZ3BpbywgMCk7Cj4gLQlncGlv X2V4cG9ydChjbV90MzUxN193bGFuX2dwaW9zWzFdLmdwaW8sIDApOwo+ICsJZ3Bpb2RfZXhwb3J0 KGdwaW9fdG9fZGVzYyhjbV90MzUxN193bGFuX2dwaW9zWzBdLmdwaW8pLCAwKTsKPiArCWdwaW9k X2V4cG9ydChncGlvX3RvX2Rlc2MoY21fdDM1MTdfd2xhbl9ncGlvc1sxXS5ncGlvKSwgMCk7Cj4g IAo+ICAJbXNsZWVwKDEwMCk7Cj4gIAlncGlvX3NldF92YWx1ZShjbV90MzUxN193bGFuX2dwaW9z WzFdLmdwaW8sIDApOwo+IGRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhh L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMKPiBpbmRleCBj NzdiNWYwMGE2NmEuLjE1MTc5MjE2MjE1MiAxMDA2NDQKPiAtLS0gYS9hcmNoL3NoL2JvYXJkcy9t YWNoLWFwMzI1cnhhL3NldHVwLmMKPiArKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhh L3NldHVwLmMKPiBAQCAtMTgsNiArMTgsNyBAQAo+ICAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4K PiAgI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgo+ ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgo+ICAjaW5jbHVkZSA8bGludXgvZ3Bp by9tYWNoaW5lLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiAgI2luY2x1ZGUgPGxpbnV4 L2luaXQuaD4KPiBAQCAtNDExLDE2ICs0MTIsMTYgQEAgc3RhdGljIGludCBfX2luaXQgYXAzMjVy eGFfZGV2aWNlc19zZXR1cCh2b2lkKQo+ICAJLyogTEQzIGFuZCBMRDQgTEVEcyAqLwo+ICAJZ3Bp b19yZXF1ZXN0KEdQSU9fUFRYNSwgTlVMTCk7IC8qIFJVTiAqLwo+ICAJZ3Bpb19kaXJlY3Rpb25f b3V0cHV0KEdQSU9fUFRYNSwgMSk7Cj4gLQlncGlvX2V4cG9ydChHUElPX1BUWDUsIDApOwo+ICsJ Z3Bpb2RfZXhwb3J0KGdwaW9fdG9fZGVzYyhHUElPX1BUWDUpLCAwKTsKPiAgCj4gIAlncGlvX3Jl cXVlc3QoR1BJT19QVFg0LCBOVUxMKTsgLyogSU5ESUNBVE9SICovCj4gIAlncGlvX2RpcmVjdGlv bl9vdXRwdXQoR1BJT19QVFg0LCAwKTsKPiAtCWdwaW9fZXhwb3J0KEdQSU9fUFRYNCwgMCk7Cj4g KwlncGlvZF9leHBvcnQoZ3Bpb190b19kZXNjKEdQSU9fUFRYNCksIDApOwo+ICAKPiAgCS8qIFNX MSBpbnB1dCAqLwo+ICAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRGNywgTlVMTCk7IC8qIE1PREUgKi8K PiAgCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUFRGNyk7Cj4gLQlncGlvX2V4cG9ydChHUElP X1BURjcsIDApOwo+ICsJZ3Bpb2RfZXhwb3J0KGdwaW9fdG9fZGVzYyhHUElPX1BURjcpLCAwKTsK PiAgCj4gIAkvKiBMQ0RDICovCj4gIAlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTUsIE5VTEwp Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1zeXNmcy5jIGIvZHJpdmVycy9n cGlvL2dwaW9saWItc3lzZnMuYwo+IGluZGV4IDQwOThiYzdmODhiNy4uYTgzZmJhMzY0OWM0IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLXN5c2ZzLmMKPiArKysgYi9kcml2ZXJz L2dwaW8vZ3Bpb2xpYi1zeXNmcy5jCj4gQEAgLTUxMSw3ICs1MTEsNyBAQCBzdGF0aWMgc3NpemVf dCB1bmV4cG9ydF9zdG9yZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLAo+ICAJCWdvdG8gZG9uZTsKPiAg Cj4gIAlkZXNjID0gZ3Bpb190b19kZXNjKGdwaW8pOwo+IC0JLyogcmVqZWN0IGJvZ3VzIGNvbW1h bmRzIChncGlvX3VuZXhwb3J0IGlnbm9yZXMgdGhlbSkgKi8KPiArCS8qIHJlamVjdCBib2d1cyBj b21tYW5kcyAoZ3Bpb2RfdW5leHBvcnQgaWdub3JlcyB0aGVtKSAqLwo+ICAJaWYgKCFkZXNjKSB7 Cj4gIAkJcHJfd2FybigiJXM6IGludmFsaWQgR1BJTyAlbGRcbiIsIF9fZnVuY19fLCBncGlvKTsK PiAgCQlyZXR1cm4gLUVJTlZBTDsKPiBAQCAtODE0LDcgKzgxNCw3IEBAIHN0YXRpYyBpbnQgX19p bml0IGdwaW9saWJfc3lzZnNfaW5pdCh2b2lkKQo+ICAJICogZWFybHkgKGUuZy4gYmVmb3JlIHRo ZSBjbGFzc19yZWdpc3RlciBhYm92ZSB3YXMgY2FsbGVkKS4KPiAgCSAqCj4gIAkgKiBXZSBydW4g YmVmb3JlIGFyY2hfaW5pdGNhbGwoKSBzbyBjaGlwLT5kZXYgbm9kZXMgY2FuIGhhdmUKPiAtCSAq IHJlZ2lzdGVyZWQsIGFuZCBzbyBhcmNoX2luaXRjYWxsKCkgY2FuIGFsd2F5cyBncGlvX2V4cG9y dCgpLgo+ICsJICogcmVnaXN0ZXJlZCwgYW5kIHNvIGFyY2hfaW5pdGNhbGwoKSBjYW4gYWx3YXlz IGdwaW9kX2V4cG9ydCgpLgo+ICAJICovCj4gIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2Nr LCBmbGFncyk7Cj4gIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdkZXYsICZncGlvX2RldmljZXMsIGxp c3QpIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvbm9vbjAxMHBjMzAuYyBiL2Ry aXZlcnMvbWVkaWEvaTJjL25vb24wMTBwYzMwLmMKPiBpbmRleCBmM2FjMzc5ZWYzNGEuLjZmYWE0 NGViNTM1NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL21lZGlhL2kyYy9ub29uMDEwcGMzMC5jCj4g KysrIGIvZHJpdmVycy9tZWRpYS9pMmMvbm9vbjAxMHBjMzAuYwo+IEBAIC0xMCw2ICsxMCw3IEBA Cj4gICAqLwo+ICAKPiAgI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9ncGlvL2NvbnN1bWVyLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Cj4gICNpbmNsdWRl IDxsaW51eC9pMmMuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiBAQCAtNzU1LDcgKzc1 Niw3IEBAIHN0YXRpYyBpbnQgbm9vbjAxMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50 LAo+ICAJCQlnb3RvIG5wX2VycjsKPiAgCQl9Cj4gIAkJaW5mby0+Z3Bpb19ucmVzZXQgPSBwZGF0 YS0+Z3Bpb19ucmVzZXQ7Cj4gLQkJZ3Bpb19leHBvcnQoaW5mby0+Z3Bpb19ucmVzZXQsIDApOwo+ ICsJCWdwaW9kX2V4cG9ydChncGlvX3RvX2Rlc2MoaW5mby0+Z3Bpb19ucmVzZXQpLCAwKTsKPiAg CX0KPiAgCj4gIAlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19uc3RieSkpIHsKPiBAQCAt NzY3LDcgKzc2OCw3IEBAIHN0YXRpYyBpbnQgbm9vbjAxMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50LAo+ICAJCQlnb3RvIG5wX2VycjsKPiAgCQl9Cj4gIAkJaW5mby0+Z3Bpb19uc3Ri eSA9IHBkYXRhLT5ncGlvX25zdGJ5Owo+IC0JCWdwaW9fZXhwb3J0KGluZm8tPmdwaW9fbnN0Ynks IDApOwo+ICsJCWdwaW9kX2V4cG9ydChncGlvX3RvX2Rlc2MoaW5mby0+Z3Bpb19uc3RieSksIDAp Owo+ICAJfQo+ICAKPiAgCWZvciAoaSA9IDA7IGkgPCBOT09OMDEwX05VTV9TVVBQTElFUzsgaSsr KQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9vdjk2NTAuYyBiL2RyaXZlcnMvbWVk aWEvaTJjL292OTY1MC5jCj4gaW5kZXggYzMxM2UxMWE5NzU0Li4wMjFhY2QyMGVkZTIgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvb3Y5NjUwLmMKPiArKysgYi9kcml2ZXJzL21lZGlh L2kyYy9vdjk2NTAuYwo+IEBAIC0xNDI2LDkgKzE0MjYsOSBAQCBzdGF0aWMgaW50IG92OTY1eF9j b25maWd1cmVfZ3Bpb3NfcGRhdGEoc3RydWN0IG92OTY1eCAqb3Y5NjV4LAo+ICAJCQlyZXR1cm4g cmV0Owo+ICAJCXY0bDJfZGJnKDEsIGRlYnVnLCAmb3Y5NjV4LT5zZCwgInNldCBncGlvICVkIHRv IDFcbiIsIGdwaW8pOwo+ICAKPiAtCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChncGlvLCAxKTsK PiAtCQlncGlvX2V4cG9ydChncGlvLCAwKTsKPiAgCQlvdjk2NXgtPmdwaW9zW2ldID0gZ3Bpb190 b19kZXNjKGdwaW8pOwo+ICsJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChvdjk2NXgtPmdwaW9z W2ldLCAxKTsKPiArCQlncGlvZF9leHBvcnQob3Y5NjV4LT5ncGlvc1tpXSwgMCk7Cj4gIAl9Cj4g IAo+ICAJcmV0dXJuIDA7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL3M1azRlY2d4 LmMgYi9kcml2ZXJzL21lZGlhL2kyYy9zNWs0ZWNneC5jCj4gaW5kZXggYWY5YTMwNTI0MmNkLi40 MTlkMDNmY2M5NzggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvczVrNGVjZ3guYwo+ ICsrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL3M1azRlY2d4LmMKPiBAQCAtMTUsNiArMTUsNyBAQAo+ ICAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4g ICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25z dW1lci5oPgo+ICAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgo+ICAjaW5jbHVkZSA8bGludXgvaTJj Lmg+Cj4gICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiBAQCAtODUyLDcgKzg1Myw3IEBAIHN0 YXRpYyBpbnQgczVrNGVjZ3hfY29uZmlnX2dwaW8oaW50IG5yLCBpbnQgdmFsLCBjb25zdCBjaGFy ICpuYW1lKQo+ICAJCXJldHVybiAwOwo+ICAJcmV0ID0gZ3Bpb19yZXF1ZXN0X29uZShuciwgZmxh Z3MsIG5hbWUpOwo+ICAJaWYgKCFyZXQpCj4gLQkJZ3Bpb19leHBvcnQobnIsIDApOwo+ICsJCWdw aW9kX2V4cG9ydChncGlvX3RvX2Rlc2MobnIpLCAwKTsKPiAgCj4gIAlyZXR1cm4gcmV0Owo+ICB9 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL3N0YTJ4MTEvc3RhMngxMV92aXAuYyBi L2RyaXZlcnMvbWVkaWEvcGNpL3N0YTJ4MTEvc3RhMngxMV92aXAuYwo+IGluZGV4IDUyNDkxMmYy MGQ5Zi4uZjdjZWY1OThmMjFkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL3N0YTJ4 MTEvc3RhMngxMV92aXAuYwo+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL3N0YTJ4MTEvc3RhMngx MV92aXAuYwo+IEBAIC0xOCw2ICsxOCw3IEBACj4gICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KPiAg I2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ICAjaW5jbHVkZSA8bGludXgvaW8uaD4KPiAr I2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2dwaW8u aD4KPiAgI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ICAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4K PiBAQCAtODkzLDYgKzg5NCw3IEBAIHN0YXRpYyBpbnQgc3RhMngxMV92aXBfaW5pdF9jb250cm9s cyhzdHJ1Y3Qgc3RhMngxMV92aXAgKnZpcCkKPiAgc3RhdGljIGludCB2aXBfZ3Bpb19yZXNlcnZl KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHBpbiwgaW50IGRpciwKPiAgCQkJICAgIGNvbnN0IGNo YXIgKm5hbWUpCj4gIHsKPiArCXN0cnVjdCBncGlvX2Rlc2MgKmRlc2MgPSBncGlvX3RvX2Rlc2Mo cGluKTsKPiAgCWludCByZXQgPSAtRU5PREVWOwo+ICAKPiAgCWlmICghZ3Bpb19pc192YWxpZChw aW4pKQo+IEBAIC05MDQsNyArOTA2LDcgQEAgc3RhdGljIGludCB2aXBfZ3Bpb19yZXNlcnZlKHN0 cnVjdCBkZXZpY2UgKmRldiwgaW50IHBpbiwgaW50IGRpciwKPiAgCQlyZXR1cm4gcmV0Owo+ICAJ fQo+ICAKPiAtCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChwaW4sIGRpcik7Cj4gKwlyZXQg PSBncGlvZF9kaXJlY3Rpb25fb3V0cHV0KGRlc2MsIGRpcik7Cj4gIAlpZiAocmV0KSB7Cj4gIAkJ ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc2V0IGRpcmVjdGlvbiBmb3IgcGluICVkICglcylcbiIs Cj4gIAkJCXBpbiwgbmFtZSk7Cj4gQEAgLTkxMiw3ICs5MTQsNyBAQCBzdGF0aWMgaW50IHZpcF9n cGlvX3Jlc2VydmUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcGluLCBpbnQgZGlyLAo+ICAJCXJl dHVybiByZXQ7Cj4gIAl9Cj4gIAo+IC0JcmV0ID0gZ3Bpb19leHBvcnQocGluLCBmYWxzZSk7Cj4g KwlyZXQgPSBncGlvZF9leHBvcnQoZGVzYywgZmFsc2UpOwo+ICAJaWYgKHJldCkgewo+ICAJCWRl dl9lcnIoZGV2LCAiRmFpbGVkIHRvIGV4cG9ydCBwaW4gJWQgKCVzKVxuIiwgcGluLCBuYW1lKTsK PiAgCQlncGlvX2ZyZWUocGluKTsKPiBAQCAtOTMyLDggKzkzNCwxMCBAQCBzdGF0aWMgaW50IHZp cF9ncGlvX3Jlc2VydmUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcGluLCBpbnQgZGlyLAo+ICBz dGF0aWMgdm9pZCB2aXBfZ3Bpb19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHBpbiwg Y29uc3QgY2hhciAqbmFtZSkKPiAgewo+ICAJaWYgKGdwaW9faXNfdmFsaWQocGluKSkgewo+ICsJ CXN0cnVjdCBncGlvX2Rlc2MgKmRlc2MgPSBncGlvX3RvX2Rlc2MocGluKTsKPiArCj4gIAkJZGV2 X2RiZyhkZXYsICJyZWxlYXNpbmcgcGluICVkICglcylcbiIsCXBpbiwgbmFtZSk7Cj4gLQkJZ3Bp b191bmV4cG9ydChwaW4pOwo+ICsJCWdwaW9kX3VuZXhwb3J0KGRlc2MpOwo+ICAJCWdwaW9fZnJl ZShwaW4pOwo+ICAJfQo+ICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2RtMzU1ZXZtX21z cC5jIGIvZHJpdmVycy9tZmQvZG0zNTVldm1fbXNwLmMKPiBpbmRleCA1NGZiNmNiZDJhYTAuLjIz ODhmYjRkMDEyMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL21mZC9kbTM1NWV2bV9tc3AuYwo+ICsr KyBiL2RyaXZlcnMvbWZkL2RtMzU1ZXZtX21zcC5jCj4gQEAgLTExLDYgKzExLDcgQEAKPiAgI2lu Y2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gICNpbmNs dWRlIDxsaW51eC9lcnIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KPiAg I2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2dwaW8vbWFjaGluZS5o Pgo+ICAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgo+IEBAIC0zMjksNyArMzMwLDcgQEAgc3RhdGlj IGludCBhZGRfY2hpbGRyZW4oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKPiAgCQlncGlvX3Jl cXVlc3Rfb25lKGdwaW8sIEdQSU9GX0lOLCBjb25maWdfaW5wdXRzW2ldLmxhYmVsKTsKPiAgCj4g IAkJLyogbWFrZSBpdCBlYXN5IGZvciB1c2Vyc3BhY2UgdG8gc2VlIHRoZXNlICovCj4gLQkJZ3Bp b19leHBvcnQoZ3BpbywgZmFsc2UpOwo+ICsJCWdwaW9kX2V4cG9ydChncGlvX3RvX2Rlc2MoZ3Bp byksIGZhbHNlKTsKPiAgCX0KPiAgCj4gIAkvKiBNTUMvU0QgaW5wdXRzIC0tIHJpZ2h0IGFmdGVy IHRoZSBsYXN0IGNvbmZpZyBpbnB1dCAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZWVl ODAyMTU0L2NhODIxMC5jIGIvZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9jYTgyMTAuYwo+IGluZGV4 IGVjZTZmZjYwNDlmNi4uNjI1MjkwN2IyYzkyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbmV0L2ll ZWU4MDIxNTQvY2E4MjEwLmMKPiArKysgYi9kcml2ZXJzL25ldC9pZWVlODAyMTU0L2NhODIxMC5j Cj4gQEAgLTUxLDYgKzUxLDcgQEAKPiAgI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgo+ ICAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgo+ICAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4K PiArI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2dw aW8uaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxNTQuaD4KPiAgI2luY2x1ZGUgPGxpbnV4 L2lvLmg+Cj4gQEAgLTI4OTUsNyArMjg5Niw3IEBAIHN0YXRpYyBpbnQgY2E4MjEwX2ludGVycnVw dF9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCj4gIAkpOwo+ICAJaWYgKHJldCkgewo+ICAJ CWRldl9jcml0KCZzcGktPmRldiwgInJlcXVlc3RfaXJxICVkIGZhaWxlZFxuIiwgcGRhdGEtPmly cV9pZCk7Cj4gLQkJZ3Bpb191bmV4cG9ydChwZGF0YS0+Z3Bpb19pcnEpOwo+ICsJCWdwaW9kX3Vu ZXhwb3J0KGdwaW9fdG9fZGVzYyhwZGF0YS0+Z3Bpb19pcnEpKTsKPiAgCQlncGlvX2ZyZWUocGRh dGEtPmdwaW9faXJxKTsKPiAgCX0KPiAgCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ3Bp by5oIGIvaW5jbHVkZS9saW51eC9ncGlvLmgKPiBpbmRleCA2NGNjOGYwOWViYTguLjdjZWI5MzY3 ODY4OSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2dwaW8uaAo+ICsrKyBiL2luY2x1ZGUv bGludXgvZ3Bpby5oCj4gQEAgLTE0NCwyNiArMTQ0LDYgQEAgZXh0ZXJuIGludCBncGlvX3JlcXVl c3Rfb25lKHVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmxh YmUKPiAgZXh0ZXJuIGludCBncGlvX3JlcXVlc3RfYXJyYXkoY29uc3Qgc3RydWN0IGdwaW8gKmFy cmF5LCBzaXplX3QgbnVtKTsKPiAgZXh0ZXJuIHZvaWQgZ3Bpb19mcmVlX2FycmF5KGNvbnN0IHN0 cnVjdCBncGlvICphcnJheSwgc2l6ZV90IG51bSk7Cj4gIAo+IC0vKgo+IC0gKiBBIHN5c2ZzIGlu dGVyZmFjZSBjYW4gYmUgZXhwb3J0ZWQgYnkgaW5kaXZpZHVhbCBkcml2ZXJzIGlmIHRoZXkgd2Fu dCwKPiAtICogYnV0IG1vcmUgdHlwaWNhbGx5IGlzIGNvbmZpZ3VyZWQgZW50aXJlbHkgZnJvbSB1 c2Vyc3BhY2UuCj4gLSAqLwo+IC1zdGF0aWMgaW5saW5lIGludCBncGlvX2V4cG9ydCh1bnNpZ25l ZCBncGlvLCBib29sIGRpcmVjdGlvbl9tYXlfY2hhbmdlKQo+IC17Cj4gLQlyZXR1cm4gZ3Bpb2Rf ZXhwb3J0KGdwaW9fdG9fZGVzYyhncGlvKSwgZGlyZWN0aW9uX21heV9jaGFuZ2UpOwo+IC19Cj4g LQo+IC1zdGF0aWMgaW5saW5lIGludCBncGlvX2V4cG9ydF9saW5rKHN0cnVjdCBkZXZpY2UgKmRl diwgY29uc3QgY2hhciAqbmFtZSwKPiAtCQkJCSAgIHVuc2lnbmVkIGdwaW8pCj4gLXsKPiAtCXJl dHVybiBncGlvZF9leHBvcnRfbGluayhkZXYsIG5hbWUsIGdwaW9fdG9fZGVzYyhncGlvKSk7Cj4g LX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3VuZXhwb3J0KHVuc2lnbmVkIGdwaW8p Cj4gLXsKPiAtCWdwaW9kX3VuZXhwb3J0KGdwaW9fdG9fZGVzYyhncGlvKSk7Cj4gLX0KPiAtCj4g IC8qIENPTkZJR19HUElPTElCOiBiaW5kaW5ncyBmb3IgbWFuYWdlZCBkZXZpY2VzIHRoYXQgd2Fu dCB0byByZXF1ZXN0IGdwaW9zICovCj4gIAo+ICBzdHJ1Y3QgZGV2aWNlOwo+IEBAIC0yNTMsMjcg KzIzMyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZV9jYW5zbGVlcCh1bnNp Z25lZCBncGlvLCBpbnQgdmFsdWUpCj4gIAlXQVJOX09OKDEpOwo+ICB9Cj4gIAo+IC1zdGF0aWMg aW5saW5lIGludCBncGlvX2V4cG9ydCh1bnNpZ25lZCBncGlvLCBib29sIGRpcmVjdGlvbl9tYXlf Y2hhbmdlKQo+IC17Cj4gLQkvKiBHUElPIGNhbiBuZXZlciBoYXZlIGJlZW4gcmVxdWVzdGVkIG9y IHNldCBhcyB7aW4sb3V0fXB1dCAqLwo+IC0JV0FSTl9PTigxKTsKPiAtCXJldHVybiAtRUlOVkFM Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIGludCBncGlvX2V4cG9ydF9saW5rKHN0cnVjdCBk ZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwKPiAtCQkJCXVuc2lnbmVkIGdwaW8pCj4gLXsK PiAtCS8qIEdQSU8gY2FuIG5ldmVyIGhhdmUgYmVlbiBleHBvcnRlZCAqLwo+IC0JV0FSTl9PTigx KTsKPiAtCXJldHVybiAtRUlOVkFMOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHZvaWQgZ3Bp b191bmV4cG9ydCh1bnNpZ25lZCBncGlvKQo+IC17Cj4gLQkvKiBHUElPIGNhbiBuZXZlciBoYXZl IGJlZW4gZXhwb3J0ZWQgKi8KPiAtCVdBUk5fT04oMSk7Cj4gLX0KPiAtCj4gIHN0YXRpYyBpbmxp bmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCj4gIHsKPiAgCS8qIEdQSU8gY2FuIG5l dmVyIGhhdmUgYmVlbiByZXF1ZXN0ZWQgb3Igc2V0IGFzIGlucHV0ICovCj4gLS0gCj4gMi4yOS4y Cj4gCgotLSAKV2l0aCBCZXN0IFJlZ2FyZHMsCkFuZHkgU2hldmNoZW5rbwoKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1h aWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==