On Mon, Oct 12, 2020 at 07:07:55AM -0700, Tom Rix wrote:
> 
> On 10/11/20 7:41 PM, Xu Yilun wrote:
> > On Sat, Oct 10, 2020 at 08:07:07AM -0700, Tom Rix wrote:
> >> On 10/10/20 12:09 AM, Xu Yilun wrote:
> >>> The value of the field dfl_device.type comes from the 12 bits register
> >>> field DFH_ID according to DFL spec. So this patch changes the definition
> >>> of the type field to u16.
> >>>
> >>> Also it is not necessary to illustrate the valid bits of the type field
> >>> in comments. Instead we should explicitly define the possible values in
> >>> the enumeration type for it, because they are shared by hardware spec.
> >>> We should not let the compiler decide these values.
> >>>
> >>> Similar changes are also applied to dfl_device.feature_id.
> >>>
> >>> This patch also fixed the MODALIAS format according to the changes
> >>> above.
> >>>
> >>> Signed-off-by: Xu Yilun <yilun...@intel.com>
> >>> ---
> >>> v9: no change
> >>> ---
> >>>  drivers/fpga/dfl.c |  3 +--
> >>>  drivers/fpga/dfl.h | 14 +++++++-------
> >>>  2 files changed, 8 insertions(+), 9 deletions(-)
> >>>
> >>> diff --git a/drivers/fpga/dfl.c b/drivers/fpga/dfl.c
> >>> index b450870..5a6ba3b 100644
> >>> --- a/drivers/fpga/dfl.c
> >>> +++ b/drivers/fpga/dfl.c
> >>> @@ -298,8 +298,7 @@ static int dfl_bus_uevent(struct device *dev, struct 
> >>> kobj_uevent_env *env)
> >>>  {
> >>>   struct dfl_device *ddev = to_dfl_dev(dev);
> >>>  
> >>> - /* The type has 4 valid bits and feature_id has 12 valid bits */
> >>> - return add_uevent_var(env, "MODALIAS=dfl:t%01Xf%03X",
> >>> + return add_uevent_var(env, "MODALIAS=dfl:t%04Xf%04X",
> >>>                         ddev->type, ddev->feature_id);
> >>>  }
> >>>  
> >>> diff --git a/drivers/fpga/dfl.h b/drivers/fpga/dfl.h
> >>> index 5dc758f..ac373b1 100644
> >>> --- a/drivers/fpga/dfl.h
> >>> +++ b/drivers/fpga/dfl.h
> >>> @@ -520,19 +520,19 @@ long dfl_feature_ioctl_set_irq(struct 
> >>> platform_device *pdev,
> >>>   * enum dfl_id_type - define the DFL FIU types
> >>>   */
> >>>  enum dfl_id_type {
> >>> - FME_ID,
> >>> - PORT_ID,
> >>> + FME_ID = 0,
> >>> + PORT_ID = 1,
> >> This is redundant, why make this change ?
> > These values are shared by hardware spec, so it is suggested that the
> > values of the enum type should be explicitly set, otherwise the compiler
> > is in its right to do whatever it wants with them (within reason...)
> >
> > Please see the original discussion:
> > https://lore.kernel.org/linux-fpga/20200923055436.ga2629...@kroah.com/
> 
> I don't believe this is undefined behavior for the compiler
> 
> from c11 6.7.2.2,3
> 
> The identifiers in an enumerator list are declared as constants that have 
> type int and may appear wherever such are permitted.127) An enumerator with = 
> defines its enumeration constant as the value of the constant expression. If 
> the first enumerator has no =, the value of its enumeration constant is 0. 
> Each subsequent enumerator with no = defines its enumeration constant as the 
> value of the constant expression obtained by adding 1 to the value of the 
> previous enumeration constant. (The use of enumerators with = may produce 
> enumeration constants with values that duplicate other values in the same 
> enumeration.) The enumerators of an enumeration are also known as its members.
> 
> setting them again has some use for documentation so this change is ok if you 
> have strong feeling for it.

The kernel developer community has "strong feelings" for this, please be
specific and list the values when they matter.

thanks,

greg k-h

Reply via email to