linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 1/7] staging: atomisp: Fix calling efivar_entry_get() with unaligned arguments
@ 2017-05-28 12:30 Hans de Goede
  2017-05-28 12:30 ` [PATCH v5 2/7] staging: atomisp: Do not call dev_warn with a NULL device Hans de Goede
  2017-05-28 12:30 ` [PATCH v5 3/7] staging: atomisp: Set step to 0 for mt9m114 menu control Hans de Goede
  0 siblings, 2 replies; 6+ messages in thread
From: Hans de Goede @ 2017-05-28 12:30 UTC (permalink / raw)
  To: Lee Jones, Chen-Yu Tsai; +Cc: Hans de Goede, linux-kernel

efivar_entry_get has certain alignment requirements and the atomisp
platform code was not honoring these, causing an oops by triggering the
WARN_ON in arch/x86/platform/efi/efi_64.c: virt_to_phys_or_null_size().

This commit fixes this by using the members of the efivar struct embedded
in the efivar_entry struct we kzalloc as arguments to efivar_entry_get(),
which is how all the other callers of efivar_entry_get() do this.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 .../atomisp/platform/intel-mid/atomisp_gmin_platform.c  | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/media/atomisp/platform/intel-mid/atomisp_gmin_platform.c b/drivers/staging/media/atomisp/platform/intel-mid/atomisp_gmin_platform.c
index 5b4506a71126..104fea2f8697 100644
--- a/drivers/staging/media/atomisp/platform/intel-mid/atomisp_gmin_platform.c
+++ b/drivers/staging/media/atomisp/platform/intel-mid/atomisp_gmin_platform.c
@@ -623,9 +623,7 @@ int gmin_get_config_var(struct device *dev, const char *var, char *out, size_t *
 	char var8[CFG_VAR_NAME_MAX];
 	efi_char16_t var16[CFG_VAR_NAME_MAX];
 	struct efivar_entry *ev;
-	u32 efiattr_dummy;
 	int i, j, ret;
-	unsigned long efilen;
 
         if (dev && ACPI_COMPANION(dev))
                 dev = &ACPI_COMPANION(dev)->dev;
@@ -684,15 +682,18 @@ int gmin_get_config_var(struct device *dev, const char *var, char *out, size_t *
 		return -ENOMEM;
 	memcpy(&ev->var.VariableName, var16, sizeof(var16));
 	ev->var.VendorGuid = GMIN_CFG_VAR_EFI_GUID;
+	ev->var.DataSize = *out_len;
 
-	efilen = *out_len;
-	ret = efivar_entry_get(ev, &efiattr_dummy, &efilen, out);
+	ret = efivar_entry_get(ev, &ev->var.Attributes,
+			       &ev->var.DataSize, ev->var.Data);
+	if (ret == 0) {
+		memcpy(out, ev->var.Data, ev->var.DataSize);
+		*out_len = ev->var.DataSize;
+	} else {
+		dev_warn(dev, "Failed to find gmin variable %s\n", var8);
+	}
 
 	kfree(ev);
-	*out_len = efilen;
-
-	if (ret)
- 		dev_warn(dev, "Failed to find gmin variable %s\n", var8);
 
 	return ret;
 }
-- 
2.13.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v5 2/7] staging: atomisp: Do not call dev_warn with a NULL device
  2017-05-28 12:30 [PATCH v5 1/7] staging: atomisp: Fix calling efivar_entry_get() with unaligned arguments Hans de Goede
@ 2017-05-28 12:30 ` Hans de Goede
  2017-05-28 17:08   ` Alan Cox
  2017-05-28 12:30 ` [PATCH v5 3/7] staging: atomisp: Set step to 0 for mt9m114 menu control Hans de Goede
  1 sibling, 1 reply; 6+ messages in thread
From: Hans de Goede @ 2017-05-28 12:30 UTC (permalink / raw)
  To: Lee Jones, Chen-Yu Tsai; +Cc: Hans de Goede, linux-kernel

Do not call dev_warn with a NULL device, this silence the following 2
warnings:

[   14.392194] (NULL device *): Failed to find gmin variable gmin_V2P8GPIO
[   14.392257] (NULL device *): Failed to find gmin variable gmin_V1P8GPIO

We could switch to using pr_warn for dev == NULL instead, but as comments
in the source indicate, the check for these 2 special gmin variables with
a NULL device is a workaround for 2 specific evaluation boards, so
completely silencing the missing warning for these actually is a good
thing.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 .../staging/media/atomisp/platform/intel-mid/atomisp_gmin_platform.c    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/media/atomisp/platform/intel-mid/atomisp_gmin_platform.c b/drivers/staging/media/atomisp/platform/intel-mid/atomisp_gmin_platform.c
index 104fea2f8697..3fea81ea5dbd 100644
--- a/drivers/staging/media/atomisp/platform/intel-mid/atomisp_gmin_platform.c
+++ b/drivers/staging/media/atomisp/platform/intel-mid/atomisp_gmin_platform.c
@@ -689,7 +689,7 @@ int gmin_get_config_var(struct device *dev, const char *var, char *out, size_t *
 	if (ret == 0) {
 		memcpy(out, ev->var.Data, ev->var.DataSize);
 		*out_len = ev->var.DataSize;
-	} else {
+	} else if (dev) {
 		dev_warn(dev, "Failed to find gmin variable %s\n", var8);
 	}
 
-- 
2.13.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v5 3/7] staging: atomisp: Set step to 0 for mt9m114 menu control
  2017-05-28 12:30 [PATCH v5 1/7] staging: atomisp: Fix calling efivar_entry_get() with unaligned arguments Hans de Goede
  2017-05-28 12:30 ` [PATCH v5 2/7] staging: atomisp: Do not call dev_warn with a NULL device Hans de Goede
@ 2017-05-28 12:30 ` Hans de Goede
  1 sibling, 0 replies; 6+ messages in thread
From: Hans de Goede @ 2017-05-28 12:30 UTC (permalink / raw)
  To: Lee Jones, Chen-Yu Tsai; +Cc: Hans de Goede, linux-kernel

menu controls are not allowed to have a step size, set step to 0 to
fix an oops from the WARN_ON in v4l2_ctrl_new_custom() triggering
because of this.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/staging/media/atomisp/i2c/mt9m114.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/media/atomisp/i2c/mt9m114.c b/drivers/staging/media/atomisp/i2c/mt9m114.c
index ced175c268d1..3fa915313e53 100644
--- a/drivers/staging/media/atomisp/i2c/mt9m114.c
+++ b/drivers/staging/media/atomisp/i2c/mt9m114.c
@@ -1499,7 +1499,7 @@ static struct v4l2_ctrl_config mt9m114_controls[] = {
 	 .type = V4L2_CTRL_TYPE_MENU,
 	 .min = 0,
 	 .max = 3,
-	 .step = 1,
+	 .step = 0,
 	 .def = 1,
 	 .flags = 0,
 	 },
-- 
2.13.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v5 2/7] staging: atomisp: Do not call dev_warn with a NULL device
  2017-05-28 12:30 ` [PATCH v5 2/7] staging: atomisp: Do not call dev_warn with a NULL device Hans de Goede
@ 2017-05-28 17:08   ` Alan Cox
  2017-05-28 18:26     ` Hans de Goede
  0 siblings, 1 reply; 6+ messages in thread
From: Alan Cox @ 2017-05-28 17:08 UTC (permalink / raw)
  To: Hans de Goede; +Cc: Lee Jones, Chen-Yu Tsai, linux-kernel

On Sun, 28 May 2017 14:30:35 +0200
Hans de Goede <hdegoede@redhat.com> wrote:

> Do not call dev_warn with a NULL device, this silence the following 2
> warnings:
> 
> [   14.392194] (NULL device *): Failed to find gmin variable gmin_V2P8GPIO
> [   14.392257] (NULL device *): Failed to find gmin variable gmin_V1P8GPIO
> 
> We could switch to using pr_warn for dev == NULL instead, but as comments
> in the source indicate, the check for these 2 special gmin variables with
> a NULL device is a workaround for 2 specific evaluation boards, so
> completely silencing the missing warning for these actually is a good
> thing.

At which point real missing variables won't get reported so NAK. I think
the right fix is to make the offending callers pass

	subdev->dev

which if my understanding of the subdevices is correct should pass the
right valid device field from the atomisp.

Please also cc me if you are proposing patches this driver - and also
linux-media.

Alan

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v5 2/7] staging: atomisp: Do not call dev_warn with a NULL device
  2017-05-28 17:08   ` Alan Cox
@ 2017-05-28 18:26     ` Hans de Goede
  2017-05-28 20:00       ` Alan Cox
  0 siblings, 1 reply; 6+ messages in thread
From: Hans de Goede @ 2017-05-28 18:26 UTC (permalink / raw)
  To: Alan Cox; +Cc: Lee Jones, Chen-Yu Tsai, linux-kernel, Linux Media Mailing List

Hi,

On 28-05-17 19:08, Alan Cox wrote:
> On Sun, 28 May 2017 14:30:35 +0200
> Hans de Goede <hdegoede@redhat.com> wrote:
> 
>> Do not call dev_warn with a NULL device, this silence the following 2
>> warnings:
>>
>> [   14.392194] (NULL device *): Failed to find gmin variable gmin_V2P8GPIO
>> [   14.392257] (NULL device *): Failed to find gmin variable gmin_V1P8GPIO
>>
>> We could switch to using pr_warn for dev == NULL instead, but as comments
>> in the source indicate, the check for these 2 special gmin variables with
>> a NULL device is a workaround for 2 specific evaluation boards, so
>> completely silencing the missing warning for these actually is a good
>> thing.
> 
> At which point real missing variables won't get reported so NAK. I think
> the right fix is to make the offending callers pass
> 
> 	subdev->dev

The code for the special v1p8 / v2p8 gpios is ugly as sin, it operates on
a global v2p8_gpio value rather then storing info in the gmin_subdev struct,
as such passing the subdev->dev pointer would be simply wrong. AFAICT the
v1p8 / v2p8 gpio code is the only caller passing in a NULL pointer and
as said since thisv1p8 / v2p8 gpio code is only for some special evaluation
boards, silencing the error when these variables are not present actually
is the right thing to do.

> which if my understanding of the subdevices is correct should pass the
> right valid device field from the atomisp.
> 
> Please also cc me if you are proposing patches this driver - and also
> linux-media.

Sorry about that, I messed up my git send-email foo and send this to
a wrong set of addresses (and also added v5 in the subject which should
not be there) I did send out a fresh-copy with the full 7 patch patch-set
directly after CTRL+c-ing this wrong send-email (which only got the
first 3 patches send).

Regards,

Hans

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v5 2/7] staging: atomisp: Do not call dev_warn with a NULL device
  2017-05-28 18:26     ` Hans de Goede
@ 2017-05-28 20:00       ` Alan Cox
  0 siblings, 0 replies; 6+ messages in thread
From: Alan Cox @ 2017-05-28 20:00 UTC (permalink / raw)
  To: Hans de Goede
  Cc: Lee Jones, Chen-Yu Tsai, linux-kernel, Linux Media Mailing List

> The code for the special v1p8 / v2p8 gpios is ugly as sin, it operates on
> a global v2p8_gpio value rather then storing info in the gmin_subdev struct,
> as such passing the subdev->dev pointer would be simply wrong. AFAICT the
> v1p8 / v2p8 gpio code is the only caller passing in a NULL pointer and
> as said since thisv1p8 / v2p8 gpio code is only for some special evaluation
> boards, silencing the error when these variables are not present actually
> is the right thing to do.

Unfortunately I don't think it is constrained to RVPs. As with all
developer hacks on code that isn't subject to public review at the time
they escape into the wild 8(

Agreed though. The patch makes sense if you don't want to print anything.

> > which if my understanding of the subdevices is correct should pass the
> > right valid device field from the atomisp.
> > 
> > Please also cc me if you are proposing patches this driver - and also
> > linux-media.  
> 
> Sorry about that, I messed up my git send-email foo and send this to
> a wrong set of addresses (and also added v5 in the subject which should
> not be there) I did send out a fresh-copy with the full 7 patch patch-set
> directly after CTRL+c-ing this wrong send-email (which only got the
> first 3 patches send).

So I discovered just afterwards 8)

Alan

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-05-28 20:00 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-28 12:30 [PATCH v5 1/7] staging: atomisp: Fix calling efivar_entry_get() with unaligned arguments Hans de Goede
2017-05-28 12:30 ` [PATCH v5 2/7] staging: atomisp: Do not call dev_warn with a NULL device Hans de Goede
2017-05-28 17:08   ` Alan Cox
2017-05-28 18:26     ` Hans de Goede
2017-05-28 20:00       ` Alan Cox
2017-05-28 12:30 ` [PATCH v5 3/7] staging: atomisp: Set step to 0 for mt9m114 menu control Hans de Goede

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).