[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <270783b7-70c6-49d5-8464-fb542396e2dd@163.com>
Date: Tue, 7 Jan 2025 19:43:26 +0800
From: Hans Zhang <18255117159@....com>
To: Niklas Cassel <cassel@...nel.org>
Cc: manivannan.sadhasivam@...aro.org, kw@...ux.com, kishon@...nel.org,
arnd@...db.de, gregkh@...uxfoundation.org, linux-pci@...r.kernel.org,
linux-kernel@...r.kernel.org, rockswang7@...il.com
Subject: Re: [v8] misc: pci_endpoint_test: Fix overflow of bar_size
On 2025/1/7 19:33, Niklas Cassel wrote:
>> Hi Niklas,
>>
>> resource_size_t bar_size;
>> remain = do_div((u64)bar_size, buf_size);
>>
>> It works for the arm platform.
>>
>> arch/arm/include/asm/div64.h
>> static inline uint32_t __div64_32(uint64_t *n, uint32_t base)
>> {
>> register unsigned int __base asm("r4") = base;
>> register unsigned long long __n asm("r0") = *n;
>> register unsigned long long __res asm("r2");
>> unsigned int __rem;
>> asm( __asmeq("%0", "r0")
>> __asmeq("%1", "r2")
>> __asmeq("%2", "r4")
>> "bl __do_div64"
>> : "+r" (__n), "=r" (__res)
>> : "r" (__base)
>> : "ip", "lr", "cc");
>> __rem = __n >> 32;
>> *n = __res;
>> return __rem;
>> }
>> #define __div64_32 __div64_32
>>
>> #define do_div(n, base) __div64_32(&(n), base)
>>
>>
>> For X86 platforms, do_div is a macro definition, and the first parameter
>> does not define its type. If the macro definition is replaced directly, an
>> error will be reported in the ubuntu20.04 release.
>
> What is the error?
>
> We don't need to use do_div().
> The current code that does normal / and % works fine on both
> 32-bit and 64-bit if you just do:
>
> static bool pci_endpoint_test_bar(struct pci_endpoint_test *test,
> enum pci_barno barno)
> {
> - int j, bar_size, buf_size, iters, remain;
> + int j, buf_size, iters, remain;
> void *write_buf __free(kfree) = NULL;
> void *read_buf __free(kfree) = NULL;
> struct pci_dev *pdev = test->pdev;
> + u64 bar_size;
>
> No?
Hi Niklas,
Please look at the robot compilation error.
https://patchwork.kernel.org/project/linux-pci/patch/20241231065500.168799-1-18255117159@163.com/
drivers/misc/pci_endpoint_test.c:315: undefined reference to `__udivmoddi4'
Best regards
Hans
Powered by blists - more mailing lists