Re: [PATCH 4.19 000/264] 4.19.153-rc1 review

From: Guenter Roeck
Date: Sat Oct 31 2020 - 10:31:37 EST


On 10/31/20 2:45 AM, Salvatore Bonaccorso wrote:
> Hi Greg,
>
> On Wed, Oct 28, 2020 at 12:56:19PM -0700, Guenter Roeck wrote:
>> Retry.
>>
>> On Wed, Oct 28, 2020 at 10:10:35AM -0700, Guenter Roeck wrote:
>>> On Tue, Oct 27, 2020 at 02:50:58PM +0100, Greg Kroah-Hartman wrote:
>>>> This is the start of the stable review cycle for the 4.19.153 release.
>>>> There are 264 patches in this series, all will be posted as a response
>>>> to this one. If anyone has any issues with these being applied, please
>>>> let me know.
>>>>
>>>> Responses should be made by Thu, 29 Oct 2020 13:53:47 +0000.
>>>> Anything received after that time might be too late.
>>>>
>>>
>>> Build results:
>>> total: 155 pass: 152 fail: 3
>>> Failed builds:
>>> i386:tools/perf
>>> powerpc:ppc6xx_defconfig
>>> x86_64:tools/perf
>>> Qemu test results:
>>> total: 417 pass: 417 fail: 0
>>>
>>> perf failures are as usual. powerpc:
>
> Regarding the perf failures, do you plan to revert b801d568c7d8 ("perf
> cs-etm: Move definition of 'traceid_list' global variable from header
> file") included in 4.19.152 or is a bugfix underway?
>

The problem is:

In file included from util/evlist.h:15:0,
from util/evsel.c:30:
util/evsel.c: In function ‘perf_evsel__exit’:
util/util.h:25:28: error: passing argument 1 of ‘free’ discards ‘const’ qualifier from pointer target type
/usr/include/stdlib.h:563:13: note: expected ‘void *’ but argument is of type ‘const char *’
extern void free (void *__ptr) __THROW;

This is seen with older versions of gcc (6.5.0 in my case). I have no idea why
newer versions of gcc/glibc accept this (afaics free() still expects a char *,
not a const char *). The underlying problem is that pmu_name should not be
declared const char *, but char *, since it is allocated. The upstream version
of perf no longer uses the same definition of zfree(). It was changed from
#define zfree(ptr) ({ free(*ptr); *ptr = NULL; })
to
#define zfree(ptr) __zfree((void **)(ptr))
which does the necessary typecast. The fix would be to either change the definition
of zfree to add the typecast, or to change the definition of pmu_name to drop the const.
Both would only apply to v4.19.y. I don't know if either would be acceptable.

Either case, reverting b801d568c7d8 won't solve that problem.

Guenter