Re: [PATCH v17 11/16] fprobe: Rewrite fprobe on function-graph tracer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Steven Rostedt <rostedt@xxxxxxxxxxx> writes:

> On Wed, 16 Oct 2024 14:07:31 +0200
> Sven Schnelle <svens@xxxxxxxxxxxxx> wrote:
>
>> > +/* Return reserved data size in words */
>> > +static inline int decode_fprobe_header(unsigned long val, struct fprobe **fp)
>> > +{
>> > +	unsigned long ptr;
>> > +
>> > +	ptr = (val & FPROBE_HEADER_PTR_MASK) | ~FPROBE_HEADER_PTR_MASK;
>> > +	if (fp)
>> > +		*fp = (struct fprobe *)ptr;
>> > +	return val >> FPROBE_HEADER_PTR_BITS;
>> > +}  
>> 
>> I think that still has the issue that the size is encoded in the
>> leftmost fields of the pointer, which doesn't work on all
>> architectures. I reported this already in v15
>> (https://lore.kernel.org/all/yt9dmsjyx067.fsf@xxxxxxxxxxxxx/)
>
> From what you said in v15:
>
>> I haven't yet fully understood why this logic is needed, but the
>> WARN_ON_ONCE triggers on s390. I'm assuming this fails because fp always
>> has the upper bits of the address set on x86 (and likely others). As an
>> example, in my test setup, fp is 0x8feec218 on s390, while it is
>> 0xffff888100add118 in x86-kvm.
>
> Since we only need to save 4 bits for size, we could have what it is
> replacing always be zero or always be f, depending on the arch. The
> question then is, is s390's 4 MSBs always zero?

s390 has separate address spaces for kernel and userspace - so kernel
addresses could be anywhere. I don't know think the range should be
limited artifically because of some optimizations.




[Index of Archives]     [Linux Kernel]     [Kernel Newbies]     [x86 Platform Driver]     [Netdev]     [Linux Wireless]     [Netfilter]     [Bugtraq]     [Linux Filesystems]     [Yosemite Discussion]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]

  Powered by Linux