Revert "media: vivid: shut up warnings due to a non-trivial logic"
0day kernel testing robot got the below dmesg and the first bad commit is https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master commit3354b54f9f
[ 248.847809] BUG: unable to handle kernel paging request at ffffc90000393131 [ 248.848015] Call Trace: [ 248.848015] ? vivid_dev_release+0xc0/0xc0 [ 248.848015] ? acpi_dev_pm_attach+0x27/0xd0 This reverts commit3354b54f9f
.
This commit is contained in:
Родитель
8179de98cd
Коммит
da2048b734
|
@ -647,7 +647,6 @@ static int vivid_create_instance(struct platform_device *pdev, int inst)
|
||||||
unsigned node_type = node_types[inst];
|
unsigned node_type = node_types[inst];
|
||||||
unsigned int allocator = allocators[inst];
|
unsigned int allocator = allocators[inst];
|
||||||
v4l2_std_id tvnorms_cap = 0, tvnorms_out = 0;
|
v4l2_std_id tvnorms_cap = 0, tvnorms_out = 0;
|
||||||
char *strings_base;
|
|
||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -860,33 +859,17 @@ static int vivid_create_instance(struct platform_device *pdev, int inst)
|
||||||
/* create a string array containing the names of all the preset timings */
|
/* create a string array containing the names of all the preset timings */
|
||||||
while (v4l2_dv_timings_presets[dev->query_dv_timings_size].bt.width)
|
while (v4l2_dv_timings_presets[dev->query_dv_timings_size].bt.width)
|
||||||
dev->query_dv_timings_size++;
|
dev->query_dv_timings_size++;
|
||||||
|
|
||||||
/*
|
|
||||||
* In order to save one allocation and an extra free, let's optimize
|
|
||||||
* the allocation here: we'll use the first elements of the
|
|
||||||
* dev->query_dv_timings_qmenu to store the timing strings pointer,
|
|
||||||
* adding an extra space there to a store a string up to 32 bytes.
|
|
||||||
* So, instead of allocating an array with size of:
|
|
||||||
* dev->query_dv_timings_size * (sizeof(void *)
|
|
||||||
* it will allocate:
|
|
||||||
* dev->query_dv_timings_size * (sizeof(void *) +
|
|
||||||
* dev->query_dv_timings_size * 32
|
|
||||||
*/
|
|
||||||
dev->query_dv_timings_qmenu = kmalloc_array(dev->query_dv_timings_size,
|
dev->query_dv_timings_qmenu = kmalloc_array(dev->query_dv_timings_size,
|
||||||
(sizeof(void *) + 32),
|
(sizeof(void *) + 32),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (dev->query_dv_timings_qmenu == NULL)
|
if (dev->query_dv_timings_qmenu == NULL)
|
||||||
goto free_dev;
|
goto free_dev;
|
||||||
|
|
||||||
/* Sets strings_base to be after the space to store the pointers */
|
|
||||||
strings_base = ((char *)&dev->query_dv_timings_qmenu)
|
|
||||||
+ dev->query_dv_timings_size * sizeof(void *);
|
|
||||||
|
|
||||||
for (i = 0; i < dev->query_dv_timings_size; i++) {
|
for (i = 0; i < dev->query_dv_timings_size; i++) {
|
||||||
const struct v4l2_bt_timings *bt = &v4l2_dv_timings_presets[i].bt;
|
const struct v4l2_bt_timings *bt = &v4l2_dv_timings_presets[i].bt;
|
||||||
char *p = strings_base + i * 32;
|
char *p = (char *)&dev->query_dv_timings_qmenu[dev->query_dv_timings_size];
|
||||||
u32 htot, vtot;
|
u32 htot, vtot;
|
||||||
|
|
||||||
|
p += i * 32;
|
||||||
dev->query_dv_timings_qmenu[i] = p;
|
dev->query_dv_timings_qmenu[i] = p;
|
||||||
|
|
||||||
htot = V4L2_DV_BT_FRAME_WIDTH(bt);
|
htot = V4L2_DV_BT_FRAME_WIDTH(bt);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче