Subject: Re: [PATCH v2 net-next] bpf: fix bpf_perf_event_read() helper

From: "Wangnan (F)" <[email-masked]>
Date: Thu, 22 Oct 2015 15:39:52 +0800

On 2015/10/22 14:21, Alexei Starovoitov wrote:
> On 10/21/15 10:31 PM, Wangnan (F) wrote:
>>> +    if ((attr->type != PERF_TYPE_RAW &&
>>> +         !(attr->type == PERF_TYPE_SOFTWARE &&
>>> +           attr->config == PERF_COUNT_SW_BPF_OUTPUT) &&
>>> +         attr->type != PERF_TYPE_HARDWARE) ||
>>> +        attr->inherit) {
>>
>> This 'if' statement is so complex. What about using a inline function
>> instead?
>
> hmm. don't see how inline function will help readability.
>

For example (not tested):

  static inline bool perf_event_can_insert_to_map(struct perf_event_attr 
*attr)
  {
     /* is inherit? */
     if (attr->inherit)
         return false;

     /* is software event? */
     if (attr->type == PERF_TYPE_SOFTWARE)
         if (attr->config == PERF_COUNT_SW_BPF_OUTPUT)
             return true;
         else
             return false;

     /* Comment... */
     if (attr->type == PERF_TYPE_RAW)
         return true;
     if (attr->type == PERF_TYPE_HARDWARE)
         return true;
     return false;
  }

  ...
  if (!perf_event_can_insert_to_map(attr))
     ....

Do you think redability is improved?

Thank you.