2013-03-26 06:19:05

by Stephen Rothwell

[permalink] [raw]
Subject: linux-next: build failure after merge of the final tree (v4l-dvb tree related)

Hi all,

After merging the final tree, today's linux-next build (powerpc
allyesconfig) failed like this:

drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c: In function 'solo_enc_default':
drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c:1031:7: error: case label does not reduce to an integer constant
drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c:1035:7: error: case label does not reduce to an integer constant

I am not sure why this has suddenly appeared, but I have disabled the
driver for now using this patch:

From: Stephen Rothwell <[email protected]>
Date: Tue, 26 Mar 2013 17:14:47 +1100
Subject: [PATCH] disable solo6x10 driver due to build errors

Signed-off-by: Stephen Rothwell <[email protected]>
---
drivers/staging/media/solo6x10/Kconfig | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/staging/media/solo6x10/Kconfig b/drivers/staging/media/solo6x10/Kconfig
index ec32776..a6a970f 100644
--- a/drivers/staging/media/solo6x10/Kconfig
+++ b/drivers/staging/media/solo6x10/Kconfig
@@ -1,6 +1,7 @@
config SOLO6X10
tristate "Softlogic 6x10 MPEG codec cards"
depends on PCI && VIDEO_DEV && SND && I2C
+ depends on BROKEN
select VIDEOBUF2_DMA_SG
select VIDEOBUF2_DMA_CONTIG
select SND_PCM
--
1.8.1

--
Cheers,
Stephen Rothwell [email protected]


Attachments:
(No filename) (1.29 kB)
(No filename) (836.00 B)
Download all attachments

2013-03-26 12:05:32

by Mauro Carvalho Chehab

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the final tree (v4l-dvb tree related)

Em Tue, 26 Mar 2013 17:18:47 +1100
Stephen Rothwell <[email protected]> escreveu:

> Hi all,
>
> After merging the final tree, today's linux-next build (powerpc
> allyesconfig) failed like this:
>
> drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c: In function 'solo_enc_default':
> drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c:1031:7: error: case label does not reduce to an integer constant
> drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c:1035:7: error: case label does not reduce to an integer constant
>
> I am not sure why this has suddenly appeared, but I have disabled the
> driver for now using this patch:

Well, solo6x10 didn't use to have its own private ioctl's until now.
Still, that's strange, as there are other drivers also using vidioc_default.

I suspect that those _IO* have its highest bit equal to 1 on powerpc
being too big for int. If so, the enclosed patch should fix.
I'm still wandering why it didn't cause any compilation problems here.

Ok, I didn't try to compile it on powerpc, but still integers have 32
bits on ppc, right?

Anyway, could you please try the enclosed patch?

-

[PATCH] [media] ioctl numbers are unsigned int

As reported by Stephen Rothwell <[email protected]>:
> drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c: In function 'solo_enc_default':
> drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c:1031:7: error: case label does not reduce to an integer constant
> drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c:1035:7: error: case label does not reduce to an integer constant

Reported-by: Stephen Rothwell <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>

diff --git a/drivers/media/pci/cx18/cx18-ioctl.c b/drivers/media/pci/cx18/cx18-ioctl.c
index 7dbd5a9..aee7b6d 100644
--- a/drivers/media/pci/cx18/cx18-ioctl.c
+++ b/drivers/media/pci/cx18/cx18-ioctl.c
@@ -1110,7 +1110,7 @@ static int cx18_log_status(struct file *file, void *fh)
}

static long cx18_default(struct file *file, void *fh, bool valid_prio,
- int cmd, void *arg)
+ unsigned int cmd, void *arg)
{
struct cx18 *cx = fh2id(fh)->cx;

diff --git a/drivers/media/pci/ivtv/ivtv-ioctl.c b/drivers/media/pci/ivtv/ivtv-ioctl.c
index 50379b2..9cbbce0 100644
--- a/drivers/media/pci/ivtv/ivtv-ioctl.c
+++ b/drivers/media/pci/ivtv/ivtv-ioctl.c
@@ -1807,7 +1807,7 @@ static int ivtv_decoder_ioctls(struct file *filp, unsigned int cmd, void *arg)
}

static long ivtv_default(struct file *file, void *fh, bool valid_prio,
- int cmd, void *arg)
+ unsigned int cmd, void *arg)
{
struct ivtv *itv = fh2id(fh)->itv;

diff --git a/drivers/media/pci/meye/meye.c b/drivers/media/pci/meye/meye.c
index 7859c43..2381b05 100644
--- a/drivers/media/pci/meye/meye.c
+++ b/drivers/media/pci/meye/meye.c
@@ -1410,7 +1410,7 @@ static int vidioc_streamoff(struct file *file, void *fh, enum v4l2_buf_type i)
}

static long vidioc_default(struct file *file, void *fh, bool valid_prio,
- int cmd, void *arg)
+ unsigned int cmd, void *arg)
{
switch (cmd) {
case MEYEIOC_G_PARAMS:
diff --git a/drivers/media/platform/davinci/vpfe_capture.c b/drivers/media/platform/davinci/vpfe_capture.c
index 20db8a0..8c50d30 100644
--- a/drivers/media/platform/davinci/vpfe_capture.c
+++ b/drivers/media/platform/davinci/vpfe_capture.c
@@ -1686,7 +1686,7 @@ unlock_out:


static long vpfe_param_handler(struct file *file, void *priv,
- bool valid_prio, int cmd, void *param)
+ bool valid_prio, unsigned int cmd, void *param)
{
struct vpfe_device *vpfe_dev = video_drvdata(file);
int ret = 0;
diff --git a/drivers/media/radio/radio-si4713.c b/drivers/media/radio/radio-si4713.c
index 2a2d21e..38b3f15 100644
--- a/drivers/media/radio/radio-si4713.c
+++ b/drivers/media/radio/radio-si4713.c
@@ -222,7 +222,7 @@ static int radio_si4713_s_frequency(struct file *file, void *p,
}

static long radio_si4713_default(struct file *file, void *p,
- bool valid_prio, int cmd, void *arg)
+ bool valid_prio, unsigned int cmd, void *arg)
{
return v4l2_device_call_until_err(get_v4l2_dev(file), 0, core,
ioctl, cmd, arg);
diff --git a/drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c b/drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c
index 39a8fb2..6c7d20f 100644
--- a/drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c
+++ b/drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c
@@ -1021,7 +1021,7 @@ static int solo_s_parm(struct file *file, void *priv,
}

static long solo_enc_default(struct file *file, void *fh,
- bool valid_prio, int cmd, void *arg)
+ bool valid_prio, unsigned int cmd, void *arg)
{
struct solo_enc_dev *solo_enc = video_drvdata(file);
struct solo_dev *solo_dev = solo_enc->solo_dev;
diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h
index 75a7dfc..b273f0e 100644
--- a/include/media/v4l2-ioctl.h
+++ b/include/media/v4l2-ioctl.h
@@ -275,7 +275,7 @@ struct v4l2_ioctl_ops {

/* For other private ioctls */
long (*vidioc_default) (struct file *file, void *fh,
- bool valid_prio, int cmd, void *arg);
+ bool valid_prio, unsigned int cmd, void *arg);
};



Attachments:
signature.asc (836.00 B)

2013-03-26 23:52:53

by Stephen Rothwell

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the final tree (v4l-dvb tree related)

Hi Mauro,

On Tue, 26 Mar 2013 09:04:52 -0300 Mauro Carvalho Chehab <[email protected]> wrote:
>
> Em Tue, 26 Mar 2013 17:18:47 +1100
> Stephen Rothwell <[email protected]> escreveu:
>
> > After merging the final tree, today's linux-next build (powerpc
> > allyesconfig) failed like this:
> >
> > drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c: In function 'solo_enc_default':
> > drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c:1031:7: error: case label does not reduce to an integer constant
> > drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c:1035:7: error: case label does not reduce to an integer constant
> >
> > I am not sure why this has suddenly appeared, but I have disabled the
> > driver for now using this patch:
>
> Well, solo6x10 didn't use to have its own private ioctl's until now.
> Still, that's strange, as there are other drivers also using vidioc_default.
>
> I suspect that those _IO* have its highest bit equal to 1 on powerpc
> being too big for int. If so, the enclosed patch should fix.
> I'm still wandering why it didn't cause any compilation problems here.
>
> Ok, I didn't try to compile it on powerpc, but still integers have 32
> bits on ppc, right?

yes.

> Anyway, could you please try the enclosed patch?

Doesn't help.

on powerpc, SOLO_IOC_G_MOTION_THRESHOLDS expands to

(((2U) << (((0 +8)+8)+13)) | ((('V')) << (0 +8)) | (((192 +0)) << 0) | (((((sizeof(struct solo_motion_thresholds) == sizeof(struct solo_motion_thresholds[1]) && sizeof(struct solo_motion_thresholds) < (1 << 13)) ? sizeof(struct solo_motion_thresholds) : __invalid_size_argument_for_IOC))) << ((0 +8)+8)))

sizeof(struct solo_motion_thresholds) is 64*64*2 == 8192 which is not
less than 1 << 13

:-(
--
Cheers,
Stephen Rothwell [email protected]


Attachments:
(No filename) (1.76 kB)
(No filename) (836.00 B)
Download all attachments

2013-03-27 11:11:47

by Stephen Rothwell

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the final tree (v4l-dvb tree related)

Hi Mauro,

On Wed, 27 Mar 2013 10:52:34 +1100 Stephen Rothwell <[email protected]> wrote:
>
> On Tue, 26 Mar 2013 09:04:52 -0300 Mauro Carvalho Chehab <[email protected]> wrote:
> >
> > Em Tue, 26 Mar 2013 17:18:47 +1100
> > Stephen Rothwell <[email protected]> escreveu:
> >
> > > After merging the final tree, today's linux-next build (powerpc
> > > allyesconfig) failed like this:
> > >
> > > drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c: In function 'solo_enc_default':
> > > drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c:1031:7: error: case label does not reduce to an integer constant
> > > drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c:1035:7: error: case label does not reduce to an integer constant
> > >
> > > I am not sure why this has suddenly appeared, but I have disabled the
> > > driver for now using this patch:
> >
> > Well, solo6x10 didn't use to have its own private ioctl's until now.
> > Still, that's strange, as there are other drivers also using vidioc_default.
> >
> > I suspect that those _IO* have its highest bit equal to 1 on powerpc
> > being too big for int. If so, the enclosed patch should fix.
> > I'm still wandering why it didn't cause any compilation problems here.
> >
> > Ok, I didn't try to compile it on powerpc, but still integers have 32
> > bits on ppc, right?
>
> yes.
>
> > Anyway, could you please try the enclosed patch?
>
> Doesn't help.
>
> on powerpc, SOLO_IOC_G_MOTION_THRESHOLDS expands to
>
> (((2U) << (((0 +8)+8)+13)) | ((('V')) << (0 +8)) | (((192 +0)) << 0) | (((((sizeof(struct solo_motion_thresholds) == sizeof(struct solo_motion_thresholds[1]) && sizeof(struct solo_motion_thresholds) < (1 << 13)) ? sizeof(struct solo_motion_thresholds) : __invalid_size_argument_for_IOC))) << ((0 +8)+8)))
>
> sizeof(struct solo_motion_thresholds) is 64*64*2 == 8192 which is not
> less than 1 << 13

Note that this will also break on alpha and mips. Sparc seems to have a
tricky workaround (to allow 14 bits for size) - I wonder if that could be
used for these other arches as well?

--
Cheers,
Stephen Rothwell [email protected]


Attachments:
(No filename) (2.09 kB)
(No filename) (836.00 B)
Download all attachments