Re: [PATCH 07/15] ftrace: fix event alignment: kvm:kvm_hv_hypercall

From: David Sharp
Date: Tue Dec 07 2010 - 16:17:16 EST


On Tue, Dec 7, 2010 at 1:22 AM, Avi Kivity <avi@xxxxxxxxxx> wrote:
> On 12/06/2010 10:38 PM, David Sharp wrote:
>> On Sat, Dec 4, 2010 at 12:11 AM, Avi Kivity<avi@xxxxxxxxxx> Âwrote:
>> > ÂOn 12/04/2010 02:13 AM, David Sharp wrote:
>> >>
>> >> ÂSigned-off-by: David Sharp<dhsharp@xxxxxxxxxx>
>> >> Â---
>> >> Â Âarch/x86/kvm/trace.h | Â Â8 ++++----
>> >> Â Â1 files changed, 4 insertions(+), 4 deletions(-)
>> >>
>> >> Âdiff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h
>> >> Âindex a6544b8..ab41fb0 100644
>> >> Â--- a/arch/x86/kvm/trace.h
>> >> Â+++ b/arch/x86/kvm/trace.h
>> >> Â@@ -62,21 +62,21 @@ TRACE_EVENT(kvm_hv_hypercall,
>> >> Â Â Â Â ÂTP_ARGS(code, fast, rep_cnt, rep_idx, ingpa, outgpa),
>> >>
>> >> Â Â Â Â ÂTP_STRUCT__entry(
>> >> Â-        __field(    Â__u16,     Âcode      Â)
>> >> Â-        __field(    Âbool,      fast      Â)
>> >>         Â__field(    Â__u16,     Ârep_cnt     )
>> >>         Â__field(    Â__u16,     Ârep_idx     )
>> >>         Â__field(    Â__u64,     Âingpa      )
>> >>         Â__field(    Â__u64,     Âoutgpa     Â)
>> >> Â+        __field(    Â__u16,     Âcode      Â)
>> >> Â+        __field(    Âbool,      fast      Â)
>> >> Â Â Â Â Â),
>> >>
>> >
>> > ÂLooks like a pessimisation.
>> >
>> > ÂBefore: 24 bytes
>> > ÂAfter: 32 bytes
>> >
>> > Â(on a 64-bit machine, assuming no packing)
>>
>> This patch is predicated on packing the event structures. And since
>> the ring buffer is 32-bit addressable, I don't attempt to improve
>> alignment beyond 32-bit boundaries.
>
> I don't understand this. ÂCan you elaborate? ÂWhat does "32-bit addressable"
> mean?

The ring buffer gives you space that is a multiple of 4 bytes in
length, and 32-bit aligned. Therefore it is useless to attempt to
align the structure beyond 32-bit boundaries, eg, a 64-bit boundary,
because it is unpredictable if the memory the structure will be
written to is at a 64-bit boundary (addr % 8 could be 0 or 4).

>ÂAnd "predicated on packing the event structures"? ÂIs the structure
> __attribute__((packed)), or is it not?

It is not packed in Linus' tree, but one of the patches before this
patch in this patch series adds __attribute__((packed)). This patch
assumes that the event packing patch has been applied. This patch
should not be applied if the packing patch is not (hence,
"predicated").

>
> --
> error compiling committee.c: too many arguments to function
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/