On 9/14/2018 2:58 AM, Jiri Pirko wrote:
> Thu, Sep 13, 2018 at 10:52:06PM CEST, amritha.namb...@intel.com wrote:
> 
> [...]
> 
>> +static struct cls_range_filter *range_lookup(struct cls_range_head *head,
>> +                                         struct range_flow_key *key,
>> +                                         struct range_flow_key *mkey,
>> +                                         bool is_skb)
>> +{
>> +    struct cls_range_filter *filter, *next_filter;
>> +    struct range_params range;
>> +    int ret;
>> +    size_t cmp_size;
>> +
>> +    list_for_each_entry_safe(filter, next_filter, &head->filters, flist) {
> 
> This really should be list_for_each_entry_rcu()
> 
> also, as I wrote in the previous email, this should be done in
> cls_flower. Look at fl_lookup() it looks-up hashtable. You just need to
> add linked list traversal and range comparison to that function for the
> hit in the hashtable.
> 

I see. Will integrate the range comparison into cls_flower.

> 
>> +            if (!is_skb) {
>> +                    /* Existing filter comparison */
>> +                    cmp_size = sizeof(filter->mkey);
>> +            } else {
>> +                    /* skb classification */
>> +                    ret = range_compare_params(&range, filter, key,
>> +                                               RANGE_PORT_DST);
>> +                    if (ret < 0)
>> +                            continue;
>> +
>> +                    ret = range_compare_params(&range, filter, key,
>> +                                               RANGE_PORT_SRC);
>> +                    if (ret < 0)
>> +                            continue;
>> +
>> +                    /* skb does not have min and max values */
>> +                    cmp_size = RANGE_KEY_MEMBER_OFFSET(tp_min);
>> +            }
>> +            if (!memcmp(mkey, &filter->mkey, cmp_size))
>> +                    return filter;
>> +    }
>> +    return NULL;
> 
> [...]
> 

Reply via email to