diff mbox series

drm/bridge: Constify struct i2c_device_id

Message ID bdba1f49b4b48e22628482b49ce81f8e1f0d97b1.1731445901.git.christophe.jaillet@wanadoo.fr (mailing list archive)
State New, archived
Headers show
Series drm/bridge: Constify struct i2c_device_id | expand

Commit Message

Christophe JAILLET Nov. 12, 2024, 9:12 p.m. UTC
'struct i2c_device_id' is not modified in these drivers.

Constifying this structure moves some data to a read-only section, so
increase overall security.

On a x86_64, with allmodconfig, as an example:
Before:
======
   text	   data	    bss	    dec	    hex	filename
  15566	    987	     32	  16585	   40c9	drivers/gpu/drm/bridge/chipone-icn6211.o

After:
=====
   text	   data	    bss	    dec	    hex	filename
  15630	    923	     32	  16585	   40c9	drivers/gpu/drm/bridge/chipone-icn6211.o

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
---
Compile tested-only.
---
 drivers/gpu/drm/bridge/chipone-icn6211.c   | 2 +-
 drivers/gpu/drm/bridge/lontium-lt9211.c    | 2 +-
 drivers/gpu/drm/bridge/lontium-lt9611.c    | 2 +-
 drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 2 +-
 drivers/gpu/drm/bridge/ti-sn65dsi83.c      | 2 +-
 drivers/gpu/drm/bridge/ti-sn65dsi86.c      | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

Comments

Doug Anderson Nov. 12, 2024, 10:29 p.m. UTC | #1
Hi,

On Tue, Nov 12, 2024 at 1:12 PM Christophe JAILLET
<christophe.jaillet@wanadoo.fr> wrote:
>
> 'struct i2c_device_id' is not modified in these drivers.
>
> Constifying this structure moves some data to a read-only section, so
> increase overall security.
>
> On a x86_64, with allmodconfig, as an example:
> Before:
> ======
>    text    data     bss     dec     hex filename
>   15566     987      32   16585    40c9 drivers/gpu/drm/bridge/chipone-icn6211.o
>
> After:
> =====
>    text    data     bss     dec     hex filename
>   15630     923      32   16585    40c9 drivers/gpu/drm/bridge/chipone-icn6211.o
>
> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
> ---
> Compile tested-only.
> ---
>  drivers/gpu/drm/bridge/chipone-icn6211.c   | 2 +-
>  drivers/gpu/drm/bridge/lontium-lt9211.c    | 2 +-
>  drivers/gpu/drm/bridge/lontium-lt9611.c    | 2 +-
>  drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 2 +-
>  drivers/gpu/drm/bridge/ti-sn65dsi83.c      | 2 +-
>  drivers/gpu/drm/bridge/ti-sn65dsi86.c      | 2 +-
>  6 files changed, 6 insertions(+), 6 deletions(-)

Acked-by: Douglas Anderson <dianders@chromium.org>
Laurent Pinchart Nov. 12, 2024, 10:43 p.m. UTC | #2
Hi Christophe,

Thank you for the patch.

On Tue, Nov 12, 2024 at 10:12:25PM +0100, Christophe JAILLET wrote:
> 'struct i2c_device_id' is not modified in these drivers.
> 
> Constifying this structure moves some data to a read-only section, so
> increase overall security.
> 
> On a x86_64, with allmodconfig, as an example:
> Before:
> ======
>    text	   data	    bss	    dec	    hex	filename
>   15566	    987	     32	  16585	   40c9	drivers/gpu/drm/bridge/chipone-icn6211.o
> 
> After:
> =====
>    text	   data	    bss	    dec	    hex	filename
>   15630	    923	     32	  16585	   40c9	drivers/gpu/drm/bridge/chipone-icn6211.o
> 
> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
> ---
> Compile tested-only.
> ---
>  drivers/gpu/drm/bridge/chipone-icn6211.c   | 2 +-
>  drivers/gpu/drm/bridge/lontium-lt9211.c    | 2 +-
>  drivers/gpu/drm/bridge/lontium-lt9611.c    | 2 +-
>  drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 2 +-
>  drivers/gpu/drm/bridge/ti-sn65dsi83.c      | 2 +-
>  drivers/gpu/drm/bridge/ti-sn65dsi86.c      | 2 +-

While at it, could you address drivers/gpu/drm/i2c/tda9950.c too ? If I
were to push a tad more, there are only two other drivers in the kernel
with the same issues outside of drivers/gpu/ according to

$ git grep '^static struct i2c_device_id'
drivers/gpu/drm/bridge/chipone-icn6211.c:static struct i2c_device_id chipone_i2c_id[] = {
drivers/gpu/drm/bridge/lontium-lt9211.c:static struct i2c_device_id lt9211_id[] = {
drivers/gpu/drm/bridge/lontium-lt9611.c:static struct i2c_device_id lt9611_id[] = {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c:static struct i2c_device_id lt9611uxc_id[] = {
drivers/gpu/drm/bridge/ti-sn65dsi83.c:static struct i2c_device_id sn65dsi83_id[] = {
drivers/gpu/drm/bridge/ti-sn65dsi86.c:static struct i2c_device_id ti_sn65dsi86_id[] = {
drivers/gpu/drm/i2c/tda9950.c:static struct i2c_device_id tda9950_ids[] = {
drivers/input/keyboard/cypress-sf.c:static struct i2c_device_id cypress_sf_id_table[] = {
sound/soc/codecs/cs42l51-i2c.c:static struct i2c_device_id cs42l51_i2c_id[] = {

:-)

Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

>  6 files changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/chipone-icn6211.c b/drivers/gpu/drm/bridge/chipone-icn6211.c
> index 9eecac457dcf..d47703559b0d 100644
> --- a/drivers/gpu/drm/bridge/chipone-icn6211.c
> +++ b/drivers/gpu/drm/bridge/chipone-icn6211.c
> @@ -785,7 +785,7 @@ static struct mipi_dsi_driver chipone_dsi_driver = {
>  	},
>  };
>  
> -static struct i2c_device_id chipone_i2c_id[] = {
> +static const struct i2c_device_id chipone_i2c_id[] = {
>  	{ "chipone,icn6211" },
>  	{},
>  };
> diff --git a/drivers/gpu/drm/bridge/lontium-lt9211.c b/drivers/gpu/drm/bridge/lontium-lt9211.c
> index c8881796fba4..999ddebb832d 100644
> --- a/drivers/gpu/drm/bridge/lontium-lt9211.c
> +++ b/drivers/gpu/drm/bridge/lontium-lt9211.c
> @@ -773,7 +773,7 @@ static void lt9211_remove(struct i2c_client *client)
>  	drm_bridge_remove(&ctx->bridge);
>  }
>  
> -static struct i2c_device_id lt9211_id[] = {
> +static const struct i2c_device_id lt9211_id[] = {
>  	{ "lontium,lt9211" },
>  	{},
>  };
> diff --git a/drivers/gpu/drm/bridge/lontium-lt9611.c b/drivers/gpu/drm/bridge/lontium-lt9611.c
> index 1b31fdebe164..8f25b338a8d8 100644
> --- a/drivers/gpu/drm/bridge/lontium-lt9611.c
> +++ b/drivers/gpu/drm/bridge/lontium-lt9611.c
> @@ -1235,7 +1235,7 @@ static void lt9611_remove(struct i2c_client *client)
>  	of_node_put(lt9611->dsi0_node);
>  }
>  
> -static struct i2c_device_id lt9611_id[] = {
> +static const struct i2c_device_id lt9611_id[] = {
>  	{ "lontium,lt9611", 0 },
>  	{}
>  };
> diff --git a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
> index 4d1d40e1f1b4..f89af8203c9d 100644
> --- a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
> +++ b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
> @@ -913,7 +913,7 @@ static void lt9611uxc_remove(struct i2c_client *client)
>  	of_node_put(lt9611uxc->dsi0_node);
>  }
>  
> -static struct i2c_device_id lt9611uxc_id[] = {
> +static const struct i2c_device_id lt9611uxc_id[] = {
>  	{ "lontium,lt9611uxc", 0 },
>  	{ /* sentinel */ }
>  };
> diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c
> index 57a7ed13f996..00d3bfa645f5 100644
> --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c
> +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c
> @@ -732,7 +732,7 @@ static void sn65dsi83_remove(struct i2c_client *client)
>  	drm_bridge_remove(&ctx->bridge);
>  }
>  
> -static struct i2c_device_id sn65dsi83_id[] = {
> +static const struct i2c_device_id sn65dsi83_id[] = {
>  	{ "ti,sn65dsi83", MODEL_SN65DSI83 },
>  	{ "ti,sn65dsi84", MODEL_SN65DSI84 },
>  	{},
> diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> index 9e31f750fd88..ce4c026b064f 100644
> --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> @@ -1970,7 +1970,7 @@ static int ti_sn65dsi86_probe(struct i2c_client *client)
>  	return ti_sn65dsi86_add_aux_device(pdata, &pdata->aux_aux, "aux");
>  }
>  
> -static struct i2c_device_id ti_sn65dsi86_id[] = {
> +static const struct i2c_device_id ti_sn65dsi86_id[] = {
>  	{ "ti,sn65dsi86", 0},
>  	{},
>  };
Christophe JAILLET Nov. 13, 2024, 9:19 p.m. UTC | #3
Le 12/11/2024 à 23:43, Laurent Pinchart a écrit :
> Hi Christophe,
> 
> Thank you for the patch.
> 
> On Tue, Nov 12, 2024 at 10:12:25PM +0100, Christophe JAILLET wrote:
>> 'struct i2c_device_id' is not modified in these drivers.
>>
>> Constifying this structure moves some data to a read-only section, so
>> increase overall security.
>>
>> On a x86_64, with allmodconfig, as an example:
>> Before:
>> ======
>>     text	   data	    bss	    dec	    hex	filename
>>    15566	    987	     32	  16585	   40c9	drivers/gpu/drm/bridge/chipone-icn6211.o
>>
>> After:
>> =====
>>     text	   data	    bss	    dec	    hex	filename
>>    15630	    923	     32	  16585	   40c9	drivers/gpu/drm/bridge/chipone-icn6211.o
>>
>> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
>> ---
>> Compile tested-only.
>> ---
>>   drivers/gpu/drm/bridge/chipone-icn6211.c   | 2 +-
>>   drivers/gpu/drm/bridge/lontium-lt9211.c    | 2 +-
>>   drivers/gpu/drm/bridge/lontium-lt9611.c    | 2 +-
>>   drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 2 +-
>>   drivers/gpu/drm/bridge/ti-sn65dsi83.c      | 2 +-
>>   drivers/gpu/drm/bridge/ti-sn65dsi86.c      | 2 +-
> 
> While at it, could you address drivers/gpu/drm/i2c/tda9950.c too ? If I
> were to push a tad more, there are only two other drivers in the kernel
> with the same issues outside of drivers/gpu/ according to

Hi Laurent,

this is in my todo list. I wanted to send it separately because all 
these files are in gpu/drm/bridge/ and tda9950.c is in gpu/drm/.

Most of the times, maintainers ask for separate patches when several 
drivers are patched. For such clean-ups, I try at least to group them by 
directory.

Same answer the other files in input and sound. Patches will be sent in 
a few days.

I've also sent one for the documentation [1] and will send one for 
const_structs.checkpatch as well.

CJ

[1]: 
https://lore.kernel.org/linux-kernel/c8e6da4adb7381ee27e8e11854c9d856382cdc93.1731445244.git.christophe.jaillet@wanadoo.fr/

> 
> $ git grep '^static struct i2c_device_id'
> drivers/gpu/drm/bridge/chipone-icn6211.c:static struct i2c_device_id chipone_i2c_id[] = {
> drivers/gpu/drm/bridge/lontium-lt9211.c:static struct i2c_device_id lt9211_id[] = {
> drivers/gpu/drm/bridge/lontium-lt9611.c:static struct i2c_device_id lt9611_id[] = {
> drivers/gpu/drm/bridge/lontium-lt9611uxc.c:static struct i2c_device_id lt9611uxc_id[] = {
> drivers/gpu/drm/bridge/ti-sn65dsi83.c:static struct i2c_device_id sn65dsi83_id[] = {
> drivers/gpu/drm/bridge/ti-sn65dsi86.c:static struct i2c_device_id ti_sn65dsi86_id[] = {
> drivers/gpu/drm/i2c/tda9950.c:static struct i2c_device_id tda9950_ids[] = {
> drivers/input/keyboard/cypress-sf.c:static struct i2c_device_id cypress_sf_id_table[] = {
> sound/soc/codecs/cs42l51-i2c.c:static struct i2c_device_id cs42l51_i2c_id[] = {
> 
> :-)
> 
> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> 
>>   6 files changed, 6 insertions(+), 6 deletions(-)

...

CJ
Laurent Pinchart Nov. 14, 2024, 11:06 a.m. UTC | #4
Hi Christophe,

On Wed, Nov 13, 2024 at 10:19:24PM +0100, Christophe JAILLET wrote:
> Le 12/11/2024 à 23:43, Laurent Pinchart a écrit :
> > On Tue, Nov 12, 2024 at 10:12:25PM +0100, Christophe JAILLET wrote:
> >> 'struct i2c_device_id' is not modified in these drivers.
> >>
> >> Constifying this structure moves some data to a read-only section, so
> >> increase overall security.
> >>
> >> On a x86_64, with allmodconfig, as an example:
> >> Before:
> >> ======
> >>     text	   data	    bss	    dec	    hex	filename
> >>    15566	    987	     32	  16585	   40c9	drivers/gpu/drm/bridge/chipone-icn6211.o
> >>
> >> After:
> >> =====
> >>     text	   data	    bss	    dec	    hex	filename
> >>    15630	    923	     32	  16585	   40c9	drivers/gpu/drm/bridge/chipone-icn6211.o
> >>
> >> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
> >> ---
> >> Compile tested-only.
> >> ---
> >>   drivers/gpu/drm/bridge/chipone-icn6211.c   | 2 +-
> >>   drivers/gpu/drm/bridge/lontium-lt9211.c    | 2 +-
> >>   drivers/gpu/drm/bridge/lontium-lt9611.c    | 2 +-
> >>   drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 2 +-
> >>   drivers/gpu/drm/bridge/ti-sn65dsi83.c      | 2 +-
> >>   drivers/gpu/drm/bridge/ti-sn65dsi86.c      | 2 +-
> > 
> > While at it, could you address drivers/gpu/drm/i2c/tda9950.c too ? If I
> > were to push a tad more, there are only two other drivers in the kernel
> > with the same issues outside of drivers/gpu/ according to
> 
> Hi Laurent,
> 
> this is in my todo list. I wanted to send it separately because all 
> these files are in gpu/drm/bridge/ and tda9950.c is in gpu/drm/.
> 
> Most of the times, maintainers ask for separate patches when several 
> drivers are patched. For such clean-ups, I try at least to group them by 
> directory.

I would probably have included tda9950.c in this patch, but I'm also
fine handling it separately.

> Same answer the other files in input and sound. Patches will be sent in 
> a few days.

Thank you. If you have extra time, there are also a handful of similar
issues with of_device_id :-)

> I've also sent one for the documentation [1] and will send one for 
> const_structs.checkpatch as well.

Thank you for that.

> CJ
> 
> [1]: https://lore.kernel.org/linux-kernel/c8e6da4adb7381ee27e8e11854c9d856382cdc93.1731445244.git.christophe.jaillet@wanadoo.fr/
> 
> > $ git grep '^static struct i2c_device_id'
> > drivers/gpu/drm/bridge/chipone-icn6211.c:static struct i2c_device_id chipone_i2c_id[] = {
> > drivers/gpu/drm/bridge/lontium-lt9211.c:static struct i2c_device_id lt9211_id[] = {
> > drivers/gpu/drm/bridge/lontium-lt9611.c:static struct i2c_device_id lt9611_id[] = {
> > drivers/gpu/drm/bridge/lontium-lt9611uxc.c:static struct i2c_device_id lt9611uxc_id[] = {
> > drivers/gpu/drm/bridge/ti-sn65dsi83.c:static struct i2c_device_id sn65dsi83_id[] = {
> > drivers/gpu/drm/bridge/ti-sn65dsi86.c:static struct i2c_device_id ti_sn65dsi86_id[] = {
> > drivers/gpu/drm/i2c/tda9950.c:static struct i2c_device_id tda9950_ids[] = {
> > drivers/input/keyboard/cypress-sf.c:static struct i2c_device_id cypress_sf_id_table[] = {
> > sound/soc/codecs/cs42l51-i2c.c:static struct i2c_device_id cs42l51_i2c_id[] = {
> > 
> > :-)
> > 
> > Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> > 
> >>   6 files changed, 6 insertions(+), 6 deletions(-)
Doug Anderson Nov. 20, 2024, 11:18 p.m. UTC | #5
Hi,

On Tue, Nov 12, 2024 at 1:12 PM Christophe JAILLET
<christophe.jaillet@wanadoo.fr> wrote:
>
> 'struct i2c_device_id' is not modified in these drivers.
>
> Constifying this structure moves some data to a read-only section, so
> increase overall security.
>
> On a x86_64, with allmodconfig, as an example:
> Before:
> ======
>    text    data     bss     dec     hex filename
>   15566     987      32   16585    40c9 drivers/gpu/drm/bridge/chipone-icn6211.o
>
> After:
> =====
>    text    data     bss     dec     hex filename
>   15630     923      32   16585    40c9 drivers/gpu/drm/bridge/chipone-icn6211.o
>
> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
> ---
> Compile tested-only.
> ---
>  drivers/gpu/drm/bridge/chipone-icn6211.c   | 2 +-
>  drivers/gpu/drm/bridge/lontium-lt9211.c    | 2 +-
>  drivers/gpu/drm/bridge/lontium-lt9611.c    | 2 +-
>  drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 2 +-
>  drivers/gpu/drm/bridge/ti-sn65dsi83.c      | 2 +-
>  drivers/gpu/drm/bridge/ti-sn65dsi86.c      | 2 +-
>  6 files changed, 6 insertions(+), 6 deletions(-)

I figured it didn't hurt if I just pushed this so I did. Now in drm-misc-next:

[1/1] drm/bridge: Constify struct i2c_device_id
      commit: dbf7986f8a56ce47465bb6e0f2b2d166b931d707

-Doug
diff mbox series

Patch

diff --git a/drivers/gpu/drm/bridge/chipone-icn6211.c b/drivers/gpu/drm/bridge/chipone-icn6211.c
index 9eecac457dcf..d47703559b0d 100644
--- a/drivers/gpu/drm/bridge/chipone-icn6211.c
+++ b/drivers/gpu/drm/bridge/chipone-icn6211.c
@@ -785,7 +785,7 @@  static struct mipi_dsi_driver chipone_dsi_driver = {
 	},
 };
 
-static struct i2c_device_id chipone_i2c_id[] = {
+static const struct i2c_device_id chipone_i2c_id[] = {
 	{ "chipone,icn6211" },
 	{},
 };
diff --git a/drivers/gpu/drm/bridge/lontium-lt9211.c b/drivers/gpu/drm/bridge/lontium-lt9211.c
index c8881796fba4..999ddebb832d 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9211.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9211.c
@@ -773,7 +773,7 @@  static void lt9211_remove(struct i2c_client *client)
 	drm_bridge_remove(&ctx->bridge);
 }
 
-static struct i2c_device_id lt9211_id[] = {
+static const struct i2c_device_id lt9211_id[] = {
 	{ "lontium,lt9211" },
 	{},
 };
diff --git a/drivers/gpu/drm/bridge/lontium-lt9611.c b/drivers/gpu/drm/bridge/lontium-lt9611.c
index 1b31fdebe164..8f25b338a8d8 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9611.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9611.c
@@ -1235,7 +1235,7 @@  static void lt9611_remove(struct i2c_client *client)
 	of_node_put(lt9611->dsi0_node);
 }
 
-static struct i2c_device_id lt9611_id[] = {
+static const struct i2c_device_id lt9611_id[] = {
 	{ "lontium,lt9611", 0 },
 	{}
 };
diff --git a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
index 4d1d40e1f1b4..f89af8203c9d 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
@@ -913,7 +913,7 @@  static void lt9611uxc_remove(struct i2c_client *client)
 	of_node_put(lt9611uxc->dsi0_node);
 }
 
-static struct i2c_device_id lt9611uxc_id[] = {
+static const struct i2c_device_id lt9611uxc_id[] = {
 	{ "lontium,lt9611uxc", 0 },
 	{ /* sentinel */ }
 };
diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c
index 57a7ed13f996..00d3bfa645f5 100644
--- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c
+++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c
@@ -732,7 +732,7 @@  static void sn65dsi83_remove(struct i2c_client *client)
 	drm_bridge_remove(&ctx->bridge);
 }
 
-static struct i2c_device_id sn65dsi83_id[] = {
+static const struct i2c_device_id sn65dsi83_id[] = {
 	{ "ti,sn65dsi83", MODEL_SN65DSI83 },
 	{ "ti,sn65dsi84", MODEL_SN65DSI84 },
 	{},
diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
index 9e31f750fd88..ce4c026b064f 100644
--- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
+++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
@@ -1970,7 +1970,7 @@  static int ti_sn65dsi86_probe(struct i2c_client *client)
 	return ti_sn65dsi86_add_aux_device(pdata, &pdata->aux_aux, "aux");
 }
 
-static struct i2c_device_id ti_sn65dsi86_id[] = {
+static const struct i2c_device_id ti_sn65dsi86_id[] = {
 	{ "ti,sn65dsi86", 0},
 	{},
 };