All of lore.kernel.org
 help / color / mirror / Atom feed
From: Coiby Xu <coiby.xu@gmail.com>
To: Alex Elder <elder@linaro.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	devel@driverdev.osuosl.org,
	"moderated list:SOUND" <alsa-devel@alsa-project.org>,
	Vaibhav Agarwal <vaibhav.sr@gmail.com>,
	Mark Greer <mgreer@animalcreek.com>,
	Takashi Iwai <tiwai@suse.com>, Johan Hovold <johan@kernel.org>,
	Jaroslav Kysela <perex@perex.cz>,
	"moderated list:GREYBUS SUBSYSTEM" <greybus-dev@lists.linaro.org>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 3/3] [PATCH] staging: greybus: __u8 is sufficient for snd_ctl_elem_type_t and snd_ctl_elem_iface_t
Date: Sat, 26 Sep 2020 13:09:58 +0800	[thread overview]
Message-ID: <20200926050958.7lz2otowjz2oqnpt@Rk> (raw)
In-Reply-To: <8e613bb6-6093-cb81-3fa1-e6583837c843@linaro.org>

On Fri, Sep 25, 2020 at 10:57:27AM -0500, Alex Elder wrote:
>On 9/25/20 9:07 AM, Coiby Xu wrote:
>>On Thu, Sep 24, 2020 at 01:00:57PM +0200, Greg Kroah-Hartman wrote:
>>>On Thu, Sep 24, 2020 at 06:20:39PM +0800, Coiby Xu wrote:
>>>>Use __8 to replace int and remove the unnecessary __bitwise type
>>>>attribute.
>>>>
>>>>Found by sparse,
>
>. . .
>
>>>>diff --git a/include/uapi/sound/asound.h b/include/uapi/sound/asound.h
>>>>index 535a7229e1d9..8e71a95644ab 100644
>>>>--- a/include/uapi/sound/asound.h
>>>>+++ b/include/uapi/sound/asound.h
>>>>@@ -950,7 +950,7 @@ struct snd_ctl_card_info {
>>>>     unsigned char components[128];    /* card components / fine
>>>>identification, delimited with one space (AC97 etc..) */
>>>> };
>>>>
>>>>-typedef int __bitwise snd_ctl_elem_type_t;
>>>>+typedef __u8 snd_ctl_elem_type_t;
>>>> #define    SNDRV_CTL_ELEM_TYPE_NONE    ((__force
>>>>snd_ctl_elem_type_t) 0) /* invalid */
>>>> #define    SNDRV_CTL_ELEM_TYPE_BOOLEAN    ((__force
>>>>snd_ctl_elem_type_t) 1) /* boolean type */
>>>> #define    SNDRV_CTL_ELEM_TYPE_INTEGER    ((__force
>>>>snd_ctl_elem_type_t) 2) /* integer type */
>>>>@@ -960,7 +960,7 @@ typedef int __bitwise snd_ctl_elem_type_t;
>>>> #define    SNDRV_CTL_ELEM_TYPE_INTEGER64    ((__force
>>>>snd_ctl_elem_type_t) 6) /* 64-bit integer type */
>>>> #define    SNDRV_CTL_ELEM_TYPE_LAST    SNDRV_CTL_ELEM_TYPE_INTEGER64
>>>>
>>>>-typedef int __bitwise snd_ctl_elem_iface_t;
>>>>+typedef __u8 snd_ctl_elem_iface_t;
>>>> #define    SNDRV_CTL_ELEM_IFACE_CARD    ((__force
>>>>snd_ctl_elem_iface_t) 0) /* global control */
>>>> #define    SNDRV_CTL_ELEM_IFACE_HWDEP    ((__force
>>>>snd_ctl_elem_iface_t) 1) /* hardware dependent device */
>>>> #define    SNDRV_CTL_ELEM_IFACE_MIXER    ((__force
>>>>snd_ctl_elem_iface_t) 2) /* virtual mixer device */
>>>
>>>I can't take a uapi sound header file patch along with a driver change,
>>>these need to be independant.
>>
>>Thank you and Alex for reminding me this is a change of public header!
>>>
>>>And this is a userspace api, you just changed the size of an externally
>>>facing variable, are you _SURE_ that is ok to do?
>>
>>The reasons I make this change are, 1) using int to represent 7 enumeration
>>values seems to be overkill; 2) using one type could avoid worries
>>about byte order.
>
>(1) might be a valid suggestion, but the file you suggest
>changing is part of the Linux user space API, which you
>basically can't change.
>
>I'm fairly certain the user space API is defined to have
>CPU-local byte order (unless specified explicitly otherwise)
>so that is not a concern.

Thank you for sharing me about the byte order of user space API which
prompts me to examine where "info->type" comes from,

	uinfo->type = (snd_ctl_elem_type_t)info->type;

Eventually it comes from the parsed topology data which is obtained via
gb_audio_gb_get_topology(gbmodule->mgmt_connection, &topology). But
since (struct gb_audio_ctl_elem_info*)->type has __u8 type, there is no
endianness concern. Then based on the principles of userspace API
shouldn't be modified and greybus is operating system independent, your
previous suggestion to use __force which means "I know what I'm doing"
is actually a good idea,

         uinfo->type = (__force snd_ctl_elem_type_t)info->type;


>>I examine one userspace example (libalsa-intf/alsa_mixer.c [1]). This
>>change won't cause compiling breakage. But I don't the experience to
>>imagine any other bad consequence.
>
>As a rule, once the user space API has been established, it
>stays with us forever.  You can add to it, but modifying
>(or removing) an existing interface is essentially forbidden.
>
>>Another way to avoid userspace API change is to let
>>"struct gb_audio_ctl_elem_info" use snd_ctl_elem_iface_t type which may
>>be more elegant than using "__force" as suggested by Alex,
>
>The Greybus definitions were explicitly defined to be
>operating system independent.  For that reason there are
>(admittedly cumbersome) definitions of certain types and
>values that essentially mimic those defined by Linux
>exactly  That way Linux (or another system using Greybus)
>can change its internal values without changing the
>Greybus API definition.  (This addresses the concern you
>mention below.)
>
>What you are suggesting is not consistent with that
>principle.
>
>					-Alex
>
>
>>$ git diff
>>diff --git a/include/linux/greybus/greybus_protocols.h
>>b/include/linux/greybus/greybus_protocols.h
>>index aeb8f9243545..7f6753ec7ef7 100644
>>--- a/include/linux/greybus/greybus_protocols.h
>>+++ b/include/linux/greybus/greybus_protocols.h
>>@@ -8,6 +8,7 @@
>>  #define __GREYBUS_PROTOCOLS_H
>>
>>  #include <linux/types.h>
>>+#include <sound/asound.h>
>>
>>  /* Fixed IDs for control/svc protocols */
>>
>>@@ -1997,7 +1998,7 @@ struct gb_audio_enumerated {
>>  } __packed;
>>
>>  struct gb_audio_ctl_elem_info { /* See snd_ctl_elem_info in Linux
>>source */
>>-       __u8            type;           /* GB_AUDIO_CTL_ELEM_TYPE_* */
>>+       snd_ctl_elem_type_t             type;           /*
>>GB_AUDIO_CTL_ELEM_TYPE_* */
>>         __le16          dimen[4];
>>         union {
>>                 struct gb_audio_integer         integer
>>
>>My only concern is if greybus authors have any special reason to not
>>include
>>sound/asound.h in the first place and re-define things like
>>SNDRV_CTL_ELEM_TYPE_*,
>>
>>/* See SNDRV_CTL_ELEM_TYPE_* in Linux source */
>>#define GB_AUDIO_CTL_ELEM_TYPE_BOOLEAN        0x01
>>#define GB_AUDIO_CTL_ELEM_TYPE_INTEGER        0x02
>>
>>/* See SNDRV_CTL_ELEM_IFACE_* in Linux source */
>>#define GB_AUDIO_CTL_ELEM_IFACE_CARD        0x00
>>...
>>
>>/* SNDRV_CTL_ELEM_ACCESS_* in Linux source */
>>#define GB_AUDIO_ACCESS_READ            BIT(0)
>>...
>>
>>[1] https://gitlab.com/Codeaurora/platform_hardware_qcom_audio/-/blob/aee6032826ec7c8b6edda404422fda0ef40ec2db/libalsa-intf/alsa_mixer.c
>>
>>  alsa_mixer.c
>>>
>>>thanks,
>>>
>>>greg k-h
>>
>>--
>>Best regards,
>>Coiby
>

--
Best regards,
Coiby

WARNING: multiple messages have this Message-ID (diff)
From: Coiby Xu <coiby.xu@gmail.com>
To: Alex Elder <elder@linaro.org>
Cc: devel@driverdev.osuosl.org,
	"moderated list:SOUND" <alsa-devel@alsa-project.org>,
	Vaibhav Agarwal <vaibhav.sr@gmail.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Takashi Iwai <tiwai@suse.com>,
	Mark Greer <mgreer@animalcreek.com>,
	"moderated list:GREYBUS SUBSYSTEM" <greybus-dev@lists.linaro.org>,
	Johan Hovold <johan@kernel.org>, Jaroslav Kysela <perex@perex.cz>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 3/3] [PATCH] staging: greybus: __u8 is sufficient for snd_ctl_elem_type_t and snd_ctl_elem_iface_t
Date: Sat, 26 Sep 2020 13:09:58 +0800	[thread overview]
Message-ID: <20200926050958.7lz2otowjz2oqnpt@Rk> (raw)
In-Reply-To: <8e613bb6-6093-cb81-3fa1-e6583837c843@linaro.org>

On Fri, Sep 25, 2020 at 10:57:27AM -0500, Alex Elder wrote:
>On 9/25/20 9:07 AM, Coiby Xu wrote:
>>On Thu, Sep 24, 2020 at 01:00:57PM +0200, Greg Kroah-Hartman wrote:
>>>On Thu, Sep 24, 2020 at 06:20:39PM +0800, Coiby Xu wrote:
>>>>Use __8 to replace int and remove the unnecessary __bitwise type
>>>>attribute.
>>>>
>>>>Found by sparse,
>
>. . .
>
>>>>diff --git a/include/uapi/sound/asound.h b/include/uapi/sound/asound.h
>>>>index 535a7229e1d9..8e71a95644ab 100644
>>>>--- a/include/uapi/sound/asound.h
>>>>+++ b/include/uapi/sound/asound.h
>>>>@@ -950,7 +950,7 @@ struct snd_ctl_card_info {
>>>>     unsigned char components[128];    /* card components / fine
>>>>identification, delimited with one space (AC97 etc..) */
>>>> };
>>>>
>>>>-typedef int __bitwise snd_ctl_elem_type_t;
>>>>+typedef __u8 snd_ctl_elem_type_t;
>>>> #define    SNDRV_CTL_ELEM_TYPE_NONE    ((__force
>>>>snd_ctl_elem_type_t) 0) /* invalid */
>>>> #define    SNDRV_CTL_ELEM_TYPE_BOOLEAN    ((__force
>>>>snd_ctl_elem_type_t) 1) /* boolean type */
>>>> #define    SNDRV_CTL_ELEM_TYPE_INTEGER    ((__force
>>>>snd_ctl_elem_type_t) 2) /* integer type */
>>>>@@ -960,7 +960,7 @@ typedef int __bitwise snd_ctl_elem_type_t;
>>>> #define    SNDRV_CTL_ELEM_TYPE_INTEGER64    ((__force
>>>>snd_ctl_elem_type_t) 6) /* 64-bit integer type */
>>>> #define    SNDRV_CTL_ELEM_TYPE_LAST    SNDRV_CTL_ELEM_TYPE_INTEGER64
>>>>
>>>>-typedef int __bitwise snd_ctl_elem_iface_t;
>>>>+typedef __u8 snd_ctl_elem_iface_t;
>>>> #define    SNDRV_CTL_ELEM_IFACE_CARD    ((__force
>>>>snd_ctl_elem_iface_t) 0) /* global control */
>>>> #define    SNDRV_CTL_ELEM_IFACE_HWDEP    ((__force
>>>>snd_ctl_elem_iface_t) 1) /* hardware dependent device */
>>>> #define    SNDRV_CTL_ELEM_IFACE_MIXER    ((__force
>>>>snd_ctl_elem_iface_t) 2) /* virtual mixer device */
>>>
>>>I can't take a uapi sound header file patch along with a driver change,
>>>these need to be independant.
>>
>>Thank you and Alex for reminding me this is a change of public header!
>>>
>>>And this is a userspace api, you just changed the size of an externally
>>>facing variable, are you _SURE_ that is ok to do?
>>
>>The reasons I make this change are, 1) using int to represent 7 enumeration
>>values seems to be overkill; 2) using one type could avoid worries
>>about byte order.
>
>(1) might be a valid suggestion, but the file you suggest
>changing is part of the Linux user space API, which you
>basically can't change.
>
>I'm fairly certain the user space API is defined to have
>CPU-local byte order (unless specified explicitly otherwise)
>so that is not a concern.

Thank you for sharing me about the byte order of user space API which
prompts me to examine where "info->type" comes from,

	uinfo->type = (snd_ctl_elem_type_t)info->type;

Eventually it comes from the parsed topology data which is obtained via
gb_audio_gb_get_topology(gbmodule->mgmt_connection, &topology). But
since (struct gb_audio_ctl_elem_info*)->type has __u8 type, there is no
endianness concern. Then based on the principles of userspace API
shouldn't be modified and greybus is operating system independent, your
previous suggestion to use __force which means "I know what I'm doing"
is actually a good idea,

         uinfo->type = (__force snd_ctl_elem_type_t)info->type;


>>I examine one userspace example (libalsa-intf/alsa_mixer.c [1]). This
>>change won't cause compiling breakage. But I don't the experience to
>>imagine any other bad consequence.
>
>As a rule, once the user space API has been established, it
>stays with us forever.  You can add to it, but modifying
>(or removing) an existing interface is essentially forbidden.
>
>>Another way to avoid userspace API change is to let
>>"struct gb_audio_ctl_elem_info" use snd_ctl_elem_iface_t type which may
>>be more elegant than using "__force" as suggested by Alex,
>
>The Greybus definitions were explicitly defined to be
>operating system independent.  For that reason there are
>(admittedly cumbersome) definitions of certain types and
>values that essentially mimic those defined by Linux
>exactly  That way Linux (or another system using Greybus)
>can change its internal values without changing the
>Greybus API definition.  (This addresses the concern you
>mention below.)
>
>What you are suggesting is not consistent with that
>principle.
>
>					-Alex
>
>
>>$ git diff
>>diff --git a/include/linux/greybus/greybus_protocols.h
>>b/include/linux/greybus/greybus_protocols.h
>>index aeb8f9243545..7f6753ec7ef7 100644
>>--- a/include/linux/greybus/greybus_protocols.h
>>+++ b/include/linux/greybus/greybus_protocols.h
>>@@ -8,6 +8,7 @@
>>  #define __GREYBUS_PROTOCOLS_H
>>
>>  #include <linux/types.h>
>>+#include <sound/asound.h>
>>
>>  /* Fixed IDs for control/svc protocols */
>>
>>@@ -1997,7 +1998,7 @@ struct gb_audio_enumerated {
>>  } __packed;
>>
>>  struct gb_audio_ctl_elem_info { /* See snd_ctl_elem_info in Linux
>>source */
>>-       __u8            type;           /* GB_AUDIO_CTL_ELEM_TYPE_* */
>>+       snd_ctl_elem_type_t             type;           /*
>>GB_AUDIO_CTL_ELEM_TYPE_* */
>>         __le16          dimen[4];
>>         union {
>>                 struct gb_audio_integer         integer
>>
>>My only concern is if greybus authors have any special reason to not
>>include
>>sound/asound.h in the first place and re-define things like
>>SNDRV_CTL_ELEM_TYPE_*,
>>
>>/* See SNDRV_CTL_ELEM_TYPE_* in Linux source */
>>#define GB_AUDIO_CTL_ELEM_TYPE_BOOLEAN        0x01
>>#define GB_AUDIO_CTL_ELEM_TYPE_INTEGER        0x02
>>
>>/* See SNDRV_CTL_ELEM_IFACE_* in Linux source */
>>#define GB_AUDIO_CTL_ELEM_IFACE_CARD        0x00
>>...
>>
>>/* SNDRV_CTL_ELEM_ACCESS_* in Linux source */
>>#define GB_AUDIO_ACCESS_READ            BIT(0)
>>...
>>
>>[1] https://gitlab.com/Codeaurora/platform_hardware_qcom_audio/-/blob/aee6032826ec7c8b6edda404422fda0ef40ec2db/libalsa-intf/alsa_mixer.c
>>
>>  alsa_mixer.c
>>>
>>>thanks,
>>>
>>>greg k-h
>>
>>--
>>Best regards,
>>Coiby
>

--
Best regards,
Coiby
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

  reply	other threads:[~2020-09-26  5:13 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-24 10:20 [PATCH 1/3] [PATCH] staging: greybus: fix warnings about endianness detected by sparse Coiby Xu
2020-09-24 10:20 ` Coiby Xu
2020-09-24 10:20 ` [PATCH 2/3] staging: greybus: codecs: use SNDRV_PCM_FMTBIT_S16_LE for format bitmask Coiby Xu
2020-09-24 10:20   ` Coiby Xu
2020-09-24 12:54   ` [greybus-dev] " Alex Elder
2020-09-24 12:54     ` Alex Elder
2020-09-24 10:20 ` [PATCH 3/3] [PATCH] staging: greybus: __u8 is sufficient for snd_ctl_elem_type_t and snd_ctl_elem_iface_t Coiby Xu
2020-09-24 10:20   ` Coiby Xu
2020-09-24 10:54   ` David Laight
2020-09-24 10:54     ` David Laight
2020-09-24 10:54     ` David Laight
2020-09-25 14:11     ` Coiby Xu
2020-09-25 14:11       ` Coiby Xu
2020-09-25 16:02       ` [greybus-dev] " Alex Elder
2020-09-25 16:02         ` Alex Elder
2020-09-25 16:02         ` Alex Elder
2020-09-26  4:01         ` Coiby Xu
2020-09-26  4:01           ` Coiby Xu
2020-09-26 10:11       ` David Laight
2020-09-26 10:11         ` David Laight
2020-09-26 10:11         ` David Laight
2020-09-24 11:00   ` Greg Kroah-Hartman
2020-09-24 11:00     ` Greg Kroah-Hartman
2020-09-24 11:00     ` Greg Kroah-Hartman
2020-09-25 14:07     ` Coiby Xu
2020-09-25 14:07       ` Coiby Xu
2020-09-25 15:57       ` Alex Elder
2020-09-25 15:57         ` Alex Elder
2020-09-25 15:57         ` Alex Elder
2020-09-26  5:09         ` Coiby Xu [this message]
2020-09-26  5:09           ` Coiby Xu
2020-09-24 13:01   ` [greybus-dev] " Alex Elder
2020-09-24 13:01     ` Alex Elder
2020-09-24 13:01     ` Alex Elder
2020-09-24 12:50 ` [greybus-dev] [PATCH 1/3] [PATCH] staging: greybus: fix warnings about endianness detected by sparse Alex Elder
2020-09-24 12:50   ` Alex Elder
2020-09-25 14:09   ` Coiby Xu
2020-09-25 14:09     ` Coiby Xu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200926050958.7lz2otowjz2oqnpt@Rk \
    --to=coiby.xu@gmail.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=devel@driverdev.osuosl.org \
    --cc=elder@linaro.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=greybus-dev@lists.linaro.org \
    --cc=johan@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgreer@animalcreek.com \
    --cc=perex@perex.cz \
    --cc=tiwai@suse.com \
    --cc=vaibhav.sr@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.