mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-18 14:25:25 +00:00
media: pvrusb2: fix pvr2_stream_callback casts
clang-16 complains about a control flow integrity (KCFI) issue in pvrusb2, which casts three different prototypes into pvr2_stream_callback: drivers/media/usb/pvrusb2/pvrusb2-v4l2.c:1070:30: error: cast from 'void (*)(struct pvr2_v4l2_fh *)' to 'pvr2_stream_callback' (aka 'void (*)(void *)') converts to incompatible function type [-Werror,-Wcast-function-type-strict] 1070 | pvr2_stream_set_callback(sp,(pvr2_stream_callback)pvr2_v4l2_notify,fh); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/usb/pvrusb2/pvrusb2-context.c:110:6: error: cast from 'void (*)(struct pvr2_context *)' to 'void (*)(void *)' converts to incompatible function type [-Werror,-Wcast-function-type-strict] 110 | (void (*)(void *))pvr2_context_notify, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/usb/pvrusb2/pvrusb2-dvb.c:152:6: error: cast from 'void (*)(struct pvr2_dvb_adapter *)' to 'pvr2_stream_callback' (aka 'void (*)(void *)') converts to incompatible function type [-Werror,-Wcast-function-type-strict] 152 | (pvr2_stream_callback) pvr2_dvb_notify, adap); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Change the functions to actually take a void* argument so the cast is no longer needed. Fixes: bb8ce9d9143c ("V4L/DVB (7682): pvrusb2-dvb: finish up stream & buffer handling") Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
parent
3de49ae81c
commit
30baa4a96b
@ -90,8 +90,10 @@ static void pvr2_context_destroy(struct pvr2_context *mp)
|
||||
}
|
||||
|
||||
|
||||
static void pvr2_context_notify(struct pvr2_context *mp)
|
||||
static void pvr2_context_notify(void *ptr)
|
||||
{
|
||||
struct pvr2_context *mp = ptr;
|
||||
|
||||
pvr2_context_set_notify(mp,!0);
|
||||
}
|
||||
|
||||
@ -106,9 +108,7 @@ static void pvr2_context_check(struct pvr2_context *mp)
|
||||
pvr2_trace(PVR2_TRACE_CTXT,
|
||||
"pvr2_context %p (initialize)", mp);
|
||||
/* Finish hardware initialization */
|
||||
if (pvr2_hdw_initialize(mp->hdw,
|
||||
(void (*)(void *))pvr2_context_notify,
|
||||
mp)) {
|
||||
if (pvr2_hdw_initialize(mp->hdw, pvr2_context_notify, mp)) {
|
||||
mp->video_stream.stream =
|
||||
pvr2_hdw_get_video_stream(mp->hdw);
|
||||
/* Trigger interface initialization. By doing this
|
||||
|
@ -84,8 +84,10 @@ static int pvr2_dvb_feed_thread(void *data)
|
||||
return stat;
|
||||
}
|
||||
|
||||
static void pvr2_dvb_notify(struct pvr2_dvb_adapter *adap)
|
||||
static void pvr2_dvb_notify(void *ptr)
|
||||
{
|
||||
struct pvr2_dvb_adapter *adap = ptr;
|
||||
|
||||
wake_up(&adap->buffer_wait_data);
|
||||
}
|
||||
|
||||
@ -145,7 +147,7 @@ static int pvr2_dvb_stream_do_start(struct pvr2_dvb_adapter *adap)
|
||||
}
|
||||
|
||||
pvr2_stream_set_callback(pvr->video_stream.stream,
|
||||
(pvr2_stream_callback) pvr2_dvb_notify, adap);
|
||||
pvr2_dvb_notify, adap);
|
||||
|
||||
ret = pvr2_stream_set_buffer_count(stream, PVR2_DVB_BUFFER_COUNT);
|
||||
if (ret < 0) return ret;
|
||||
|
@ -1033,8 +1033,10 @@ static int pvr2_v4l2_open(struct file *file)
|
||||
}
|
||||
|
||||
|
||||
static void pvr2_v4l2_notify(struct pvr2_v4l2_fh *fhp)
|
||||
static void pvr2_v4l2_notify(void *ptr)
|
||||
{
|
||||
struct pvr2_v4l2_fh *fhp = ptr;
|
||||
|
||||
wake_up(&fhp->wait_data);
|
||||
}
|
||||
|
||||
@ -1067,7 +1069,7 @@ static int pvr2_v4l2_iosetup(struct pvr2_v4l2_fh *fh)
|
||||
|
||||
hdw = fh->channel.mc_head->hdw;
|
||||
sp = fh->pdi->stream->stream;
|
||||
pvr2_stream_set_callback(sp,(pvr2_stream_callback)pvr2_v4l2_notify,fh);
|
||||
pvr2_stream_set_callback(sp, pvr2_v4l2_notify, fh);
|
||||
pvr2_hdw_set_stream_type(hdw,fh->pdi->config);
|
||||
if ((ret = pvr2_hdw_set_streaming(hdw,!0)) < 0) return ret;
|
||||
return pvr2_ioread_set_enabled(fh->rhp,!0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user