2023-11-29 11:38:38

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH 1/2] drm/imagination: avoid -Wmissing-prototype warnings

From: Arnd Bergmann <[email protected]>

This warning option is now enabled by default, causing a few build regressions
in combination with the newly added pvr driver:

drivers/gpu/drm/imagination/pvr_device.c:130:6: error: no previous prototype for 'pvr_device_process_active_queues' [-Werror=missing-prototypes]
130 | void pvr_device_process_active_queues(struct pvr_device *pvr_dev)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/imagination/pvr_fw_meta.c:33:1: error: no previous prototype for 'pvr_meta_cr_read32' [-Werror=missing-prototypes]
33 | pvr_meta_cr_read32(struct pvr_device *pvr_dev, u32 reg_addr, u32 *reg_value_out)
| ^~~~~~~~~~~~~~~~~~
drivers/gpu/drm/imagination/pvr_vm.c:542:6: error: no previous prototype for 'pvr_gpuvm_free' [-Werror=missing-prototypes]
542 | void pvr_gpuvm_free(struct drm_gpuvm *gpuvm)

Mark pvr_device_process_active_queues and pvr_gpuvm_free static as they are only used
in the file they are defined in, and include the correct header for the pvr_meta_cr_read32
declaration.

Fixes: eaf01ee5ba28 ("drm/imagination: Implement job submission and scheduling")
Fixes: cc1aeedb98ad ("drm/imagination: Implement firmware infrastructure and META FW support")
Fixes: ff5f643de0bf ("drm/imagination: Add GEM and VM related code")
Signed-off-by: Arnd Bergmann <[email protected]>
---
drivers/gpu/drm/imagination/pvr_device.c | 2 +-
drivers/gpu/drm/imagination/pvr_fw_meta.c | 1 +
drivers/gpu/drm/imagination/pvr_vm.c | 2 +-
3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/imagination/pvr_device.c b/drivers/gpu/drm/imagination/pvr_device.c
index 8499becf4fbb..048eba776cf2 100644
--- a/drivers/gpu/drm/imagination/pvr_device.c
+++ b/drivers/gpu/drm/imagination/pvr_device.c
@@ -127,7 +127,7 @@ static int pvr_device_clk_init(struct pvr_device *pvr_dev)
* This is called any time we receive a FW event. It iterates over all
* active queues and calls pvr_queue_process() on them.
*/
-void pvr_device_process_active_queues(struct pvr_device *pvr_dev)
+static void pvr_device_process_active_queues(struct pvr_device *pvr_dev)
{
struct pvr_queue *queue, *tmp_queue;
LIST_HEAD(active_queues);
diff --git a/drivers/gpu/drm/imagination/pvr_fw_meta.c b/drivers/gpu/drm/imagination/pvr_fw_meta.c
index 119934c36184..c39beb70c317 100644
--- a/drivers/gpu/drm/imagination/pvr_fw_meta.c
+++ b/drivers/gpu/drm/imagination/pvr_fw_meta.c
@@ -4,6 +4,7 @@
#include "pvr_device.h"
#include "pvr_fw.h"
#include "pvr_fw_info.h"
+#include "pvr_fw_meta.h"
#include "pvr_gem.h"
#include "pvr_rogue_cr_defs.h"
#include "pvr_rogue_meta.h"
diff --git a/drivers/gpu/drm/imagination/pvr_vm.c b/drivers/gpu/drm/imagination/pvr_vm.c
index 2aab53594a77..30ecd7d7052e 100644
--- a/drivers/gpu/drm/imagination/pvr_vm.c
+++ b/drivers/gpu/drm/imagination/pvr_vm.c
@@ -539,7 +539,7 @@ pvr_device_addr_and_size_are_valid(struct pvr_vm_context *vm_ctx,
(device_addr + size <= PVR_PAGE_TABLE_ADDR_SPACE_SIZE);
}

-void pvr_gpuvm_free(struct drm_gpuvm *gpuvm)
+static void pvr_gpuvm_free(struct drm_gpuvm *gpuvm)
{
kfree(to_pvr_vm_context(gpuvm));
}
--
2.39.2


2023-11-29 11:39:09

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH 2/2] drm/imagination: avoid -Woverflow warning

From: Arnd Bergmann <[email protected]>

The array size calculation in pvr_vm_mips_fini() appears to be incorrect based on
taking the size of the pointer rather than the size of the array, which manifests
as a warning about signed integer overflow:

In file included from include/linux/kernel.h:16,
from drivers/gpu/drm/imagination/pvr_rogue_fwif.h:10,
from drivers/gpu/drm/imagination/pvr_ccb.h:7,
from drivers/gpu/drm/imagination/pvr_device.h:7,
from drivers/gpu/drm/imagination/pvr_vm_mips.c:4:
drivers/gpu/drm/imagination/pvr_vm_mips.c: In function 'pvr_vm_mips_fini':
include/linux/array_size.h:11:25: error: overflow in conversion from 'long unsigned int' to 'int' changes value from '18446744073709551615' to '-1' [-Werror=overflow]
11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
| ^
drivers/gpu/drm/imagination/pvr_vm_mips.c:106:24: note: in expansion of macro 'ARRAY_SIZE'
106 | for (page_nr = ARRAY_SIZE(mips_data->pt_pages) - 1; page_nr >= 0; page_nr--) {
| ^~~~~~~~~~

Just use the number of array elements directly here, and in the corresponding
init function for consistency.

Fixes: 927f3e0253c1 ("drm/imagination: Implement MIPS firmware processor and MMU support")
Signed-off-by: Arnd Bergmann <[email protected]>
---
drivers/gpu/drm/imagination/pvr_vm_mips.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/imagination/pvr_vm_mips.c b/drivers/gpu/drm/imagination/pvr_vm_mips.c
index 7268cf6e630b..6c2e4cc4e6db 100644
--- a/drivers/gpu/drm/imagination/pvr_vm_mips.c
+++ b/drivers/gpu/drm/imagination/pvr_vm_mips.c
@@ -46,7 +46,7 @@ pvr_vm_mips_init(struct pvr_device *pvr_dev)
if (!mips_data)
return -ENOMEM;

- for (page_nr = 0; page_nr < ARRAY_SIZE(mips_data->pt_pages); page_nr++) {
+ for (page_nr = 0; page_nr < PVR_MIPS_PT_PAGE_COUNT; page_nr++) {
mips_data->pt_pages[page_nr] = alloc_page(GFP_KERNEL | __GFP_ZERO);
if (!mips_data->pt_pages[page_nr]) {
err = -ENOMEM;
@@ -103,7 +103,7 @@ pvr_vm_mips_fini(struct pvr_device *pvr_dev)
int page_nr;

vunmap(mips_data->pt);
- for (page_nr = ARRAY_SIZE(mips_data->pt_pages) - 1; page_nr >= 0; page_nr--) {
+ for (page_nr = PVR_MIPS_PT_PAGE_COUNT - 1; page_nr >= 0; page_nr--) {
dma_unmap_page(from_pvr_device(pvr_dev)->dev,
mips_data->pt_dma_addr[page_nr], PAGE_SIZE, DMA_TO_DEVICE);

--
2.39.2

2023-11-29 12:02:00

by Donald Robson

[permalink] [raw]
Subject: Re: [PATCH 2/2] drm/imagination: avoid -Woverflow warning

Hello Arnd,

Thanks for the patch. I'm slightly concerned that we've not seen this warning when
building here. I guess we need to check our CI settings...

Reviewed-by: Donald Robson <[email protected]>

On Wed, 2023-11-29 at 12:33 +0100, Arnd Bergmann wrote:
> From: Arnd Bergmann <[email protected]>
>
> The array size calculation in pvr_vm_mips_fini() appears to be incorrect based on
> taking the size of the pointer rather than the size of the array, which manifests
> as a warning about signed integer overflow:
>
> In file included from include/linux/kernel.h:16,
> from drivers/gpu/drm/imagination/pvr_rogue_fwif.h:10,
> from drivers/gpu/drm/imagination/pvr_ccb.h:7,
> from drivers/gpu/drm/imagination/pvr_device.h:7,
> from drivers/gpu/drm/imagination/pvr_vm_mips.c:4:
> drivers/gpu/drm/imagination/pvr_vm_mips.c: In function 'pvr_vm_mips_fini':
> include/linux/array_size.h:11:25: error: overflow in conversion from 'long unsigned int' to 'int' changes value from '18446744073709551615' to '-1' [-Werror=overflow]
> 11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
> | ^
> drivers/gpu/drm/imagination/pvr_vm_mips.c:106:24: note: in expansion of macro 'ARRAY_SIZE'
> 106 | for (page_nr = ARRAY_SIZE(mips_data->pt_pages) - 1; page_nr >= 0; page_nr--) {
> | ^~~~~~~~~~
>
> Just use the number of array elements directly here, and in the corresponding
> init function for consistency.
>
> Fixes: 927f3e0253c1 ("drm/imagination: Implement MIPS firmware processor and MMU support")
> Signed-off-by: Arnd Bergmann <[email protected]>
> ---
> drivers/gpu/drm/imagination/pvr_vm_mips.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/imagination/pvr_vm_mips.c b/drivers/gpu/drm/imagination/pvr_vm_mips.c
> index 7268cf6e630b..6c2e4cc4e6db 100644
> --- a/drivers/gpu/drm/imagination/pvr_vm_mips.c
> +++ b/drivers/gpu/drm/imagination/pvr_vm_mips.c
> @@ -46,7 +46,7 @@ pvr_vm_mips_init(struct pvr_device *pvr_dev)
> if (!mips_data)
> return -ENOMEM;
>
> - for (page_nr = 0; page_nr < ARRAY_SIZE(mips_data->pt_pages); page_nr++) {
> + for (page_nr = 0; page_nr < PVR_MIPS_PT_PAGE_COUNT; page_nr++) {
> mips_data->pt_pages[page_nr] = alloc_page(GFP_KERNEL | __GFP_ZERO);
> if (!mips_data->pt_pages[page_nr]) {
> err = -ENOMEM;
> @@ -103,7 +103,7 @@ pvr_vm_mips_fini(struct pvr_device *pvr_dev)
> int page_nr;
>
> vunmap(mips_data->pt);
> - for (page_nr = ARRAY_SIZE(mips_data->pt_pages) - 1; page_nr >= 0; page_nr--) {
> + for (page_nr = PVR_MIPS_PT_PAGE_COUNT - 1; page_nr >= 0; page_nr--) {
> dma_unmap_page(from_pvr_device(pvr_dev)->dev,
> mips_data->pt_dma_addr[page_nr], PAGE_SIZE, DMA_TO_DEVICE);
>

2023-11-29 12:05:34

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH 2/2] drm/imagination: avoid -Woverflow warning

On Wed, Nov 29, 2023, at 13:01, Donald Robson wrote:
> Hello Arnd,
>
> Thanks for the patch. I'm slightly concerned that we've not seen this
> warning when
> building here. I guess we need to check our CI settings...
>
> Reviewed-by: Donald Robson <[email protected]>

This was previously enabled only when building with either
"make W=1" or "make C=1", but not the default build, which
explains why it only showed up after the merge into linux-next
that has the corresponding scripts/Makefile.extrawarn change.

It would still be a good idea to add the extra compiler (W=1)
and sparse (C=1) warnings in your CI system and address all
other issues that might uncover.

Arnd

2023-11-29 12:08:18

by Donald Robson

[permalink] [raw]
Subject: Re: [PATCH 1/2] drm/imagination: avoid -Wmissing-prototype warnings

Hello Arnd,

Thanks for this. However, I fixed these in a patch a few minutes before you sent
yours. I'm not sure what normally happens in these circumstances, but as my patch has
the kernel robot tags and a few additional fixes, I think we should probably use that
one.

Thanks,
Donald

On Wed, 2023-11-29 at 12:33 +0100, Arnd Bergmann wrote:
> From: Arnd Bergmann <[email protected]>
>
> This warning option is now enabled by default, causing a few build regressions
> in combination with the newly added pvr driver:
>
> drivers/gpu/drm/imagination/pvr_device.c:130:6: error: no previous prototype for 'pvr_device_process_active_queues' [-Werror=missing-prototypes]
> 130 | void pvr_device_process_active_queues(struct pvr_device *pvr_dev)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> drivers/gpu/drm/imagination/pvr_fw_meta.c:33:1: error: no previous prototype for 'pvr_meta_cr_read32' [-Werror=missing-prototypes]
> 33 | pvr_meta_cr_read32(struct pvr_device *pvr_dev, u32 reg_addr, u32 *reg_value_out)
> | ^~~~~~~~~~~~~~~~~~
> drivers/gpu/drm/imagination/pvr_vm.c:542:6: error: no previous prototype for 'pvr_gpuvm_free' [-Werror=missing-prototypes]
> 542 | void pvr_gpuvm_free(struct drm_gpuvm *gpuvm)
>
> Mark pvr_device_process_active_queues and pvr_gpuvm_free static as they are only used
> in the file they are defined in, and include the correct header for the pvr_meta_cr_read32
> declaration.
>
> Fixes: eaf01ee5ba28 ("drm/imagination: Implement job submission and scheduling")
> Fixes: cc1aeedb98ad ("drm/imagination: Implement firmware infrastructure and META FW support")
> Fixes: ff5f643de0bf ("drm/imagination: Add GEM and VM related code")
> Signed-off-by: Arnd Bergmann <[email protected]>
> ---
> drivers/gpu/drm/imagination/pvr_device.c | 2 +-
> drivers/gpu/drm/imagination/pvr_fw_meta.c | 1 +
> drivers/gpu/drm/imagination/pvr_vm.c | 2 +-
> 3 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/imagination/pvr_device.c b/drivers/gpu/drm/imagination/pvr_device.c
> index 8499becf4fbb..048eba776cf2 100644
> --- a/drivers/gpu/drm/imagination/pvr_device.c
> +++ b/drivers/gpu/drm/imagination/pvr_device.c
> @@ -127,7 +127,7 @@ static int pvr_device_clk_init(struct pvr_device *pvr_dev)
> * This is called any time we receive a FW event. It iterates over all
> * active queues and calls pvr_queue_process() on them.
> */
> -void pvr_device_process_active_queues(struct pvr_device *pvr_dev)
> +static void pvr_device_process_active_queues(struct pvr_device *pvr_dev)
> {
> struct pvr_queue *queue, *tmp_queue;
> LIST_HEAD(active_queues);
> diff --git a/drivers/gpu/drm/imagination/pvr_fw_meta.c b/drivers/gpu/drm/imagination/pvr_fw_meta.c
> index 119934c36184..c39beb70c317 100644
> --- a/drivers/gpu/drm/imagination/pvr_fw_meta.c
> +++ b/drivers/gpu/drm/imagination/pvr_fw_meta.c
> @@ -4,6 +4,7 @@
> #include "pvr_device.h"
> #include "pvr_fw.h"
> #include "pvr_fw_info.h"
> +#include "pvr_fw_meta.h"
> #include "pvr_gem.h"
> #include "pvr_rogue_cr_defs.h"
> #include "pvr_rogue_meta.h"
> diff --git a/drivers/gpu/drm/imagination/pvr_vm.c b/drivers/gpu/drm/imagination/pvr_vm.c
> index 2aab53594a77..30ecd7d7052e 100644
> --- a/drivers/gpu/drm/imagination/pvr_vm.c
> +++ b/drivers/gpu/drm/imagination/pvr_vm.c
> @@ -539,7 +539,7 @@ pvr_device_addr_and_size_are_valid(struct pvr_vm_context *vm_ctx,
> (device_addr + size <= PVR_PAGE_TABLE_ADDR_SPACE_SIZE);
> }
>
> -void pvr_gpuvm_free(struct drm_gpuvm *gpuvm)
> +static void pvr_gpuvm_free(struct drm_gpuvm *gpuvm)
> {
> kfree(to_pvr_vm_context(gpuvm));
> }

2023-11-29 12:16:08

by Donald Robson

[permalink] [raw]
Subject: Re: [EXTERNAL] Re: [PATCH 2/2] drm/imagination: avoid -Woverflow warning

On Wed, 2023-11-29 at 13:04 +0100, Arnd Bergmann wrote:
> *** CAUTION: This email originates from a source not known to Imagination Technologies. Think before you click a link or open an attachment ***
>
> On Wed, Nov 29, 2023, at 13:01, Donald Robson wrote:
> > Hello Arnd,
> >
> > Thanks for the patch. I'm slightly concerned that we've not seen this
> > warning when
> > building here. I guess we need to check our CI settings...
> >
> > Reviewed-by: Donald Robson <[email protected]>
>
> This was previously enabled only when building with either
> "make W=1" or "make C=1", but not the default build, which
> explains why it only showed up after the merge into linux-next
> that has the corresponding scripts/Makefile.extrawarn change.
>
> It would still be a good idea to add the extra compiler (W=1)
> and sparse (C=1) warnings in your CI system and address all
> other issues that might uncover.
>
> Arnd

Thanks Arnd, we will do this.

2023-11-29 12:16:36

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH 1/2] drm/imagination: avoid -Wmissing-prototype warnings

On Wed, Nov 29, 2023, at 13:07, Donald Robson wrote:
> Hello Arnd,
>
> Thanks for this. However, I fixed these in a patch a few minutes
> before you sent
> yours. I'm not sure what normally happens in these circumstances, but
> as my patch has
> the kernel robot tags and a few additional fixes, I think we should
> probably use that
> one.

Sure, that's fine. If you don't mind rebasing, just add a
"Reported-by: Arnd Bergmann <[email protected]>" line as well.

I tend to create a bug fix for any build regressions I see as
part of building randconfig kernels, but it's normal that the
mainainers have already fixed the same bug before I send my
patch, or that there is a better solution than what I come up
with.

Arnd

2023-11-29 12:22:44

by Donald Robson

[permalink] [raw]
Subject: Re: [EXTERNAL] Re: [PATCH 1/2] drm/imagination: avoid -Wmissing-prototype warnings

On Wed, 2023-11-29 at 13:16 +0100, Arnd Bergmann wrote:
> *** CAUTION: This email originates from a source not known to Imagination Technologies. Think before you click a link or open an attachment ***
>
> On Wed, Nov 29, 2023, at 13:07, Donald Robson wrote:
> > Hello Arnd,
> >
> > Thanks for this. However, I fixed these in a patch a few minutes
> > before you sent
> > yours. I'm not sure what normally happens in these circumstances, but
> > as my patch has
> > the kernel robot tags and a few additional fixes, I think we should
> > probably use that
> > one.
>
> Sure, that's fine. If you don't mind rebasing, just add a
> "Reported-by: Arnd Bergmann <[email protected]>" line as well.
>
> I tend to create a bug fix for any build regressions I see as
> part of building randconfig kernels, but it's normal that the
> mainainers have already fixed the same bug before I send my
> patch, or that there is a better solution than what I come up
> with.
>
> Arnd

Will do! In fact Maxime just told me to resubmit as a series anyway.

Donald