Re: [PATCH 5.15 00/78] 5.15.55-rc1 review

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

 



On 7/14/22 19:02, Linus Torvalds wrote:
And guess what? The code could just use roundup_pow_of_two(), which is
designed exactly like ilog2() to be used for compile-time constant
values.

So the code should just use

     #define FASTOP_SIZE roundup_pow_of_two(FASTOP_LENGTH)

and be a lot more legible, wouldn't it?

Because I don't think there is anything magical about the length
"8/16/32". It's purely "aligned and big enough to contain
FASTOP_LENGTH".

roundup_pow_of_two unfortunately is not enough for stringizing FASTOP_SIZE into an asm statement. :(

	#define __FOP_FUNC(name) \
	        ".align " __stringify(FASTOP_SIZE) " \n\t" \
	        ".type " name ", @function \n\t" \
	        name ":\n\t" \
	        ASM_ENDBR

The shifts are what we came up with for the SETCC thunks when ENDBR and SLS made them grew beyond 4 bytes; Peter's patch is reusing the trick for the fastop thunks.

Because I don't think there is anything magical about the length
"8/16/32". It's purely "aligned and big enough to contain
FASTOP_LENGTH".

I agree with that, it's only limited to 8/16/32 to keep the macro to a decent size.

And then the point of that

    static_assert(FASTOP_LENGTH <= FASTOP_SIZE);

just goes away, because there are no subtle math issues there any more.

In fact, the remaining question is just "where did the 7 come from" in

    #define FASTOP_LENGTH (7 + ENDBR_INSN_SIZE + RET_LENGTH)

The 7 is an upper limit to the length of the code between endbr and ret.
There's no particular reason to limit to 7, but it allows using an alignment of 8 in the smallest case (no thunks, no SLS, no endbr) where you just have ".align 8; ...; ret".

Paolo




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux