@@ -3464,6 +3464,15 @@ static int btf_get_field_type(const char *name, u32 field_mask, u32 *seen_mask,
34643464 goto end ;
34653465 }
34663466 }
3467+ if (field_mask & BPF_WORKQUEUE ) {
3468+ if (!strcmp (name , "bpf_wq" )) {
3469+ if (* seen_mask & BPF_WORKQUEUE )
3470+ return - E2BIG ;
3471+ * seen_mask |= BPF_WORKQUEUE ;
3472+ type = BPF_WORKQUEUE ;
3473+ goto end ;
3474+ }
3475+ }
34673476 field_mask_test_name (BPF_LIST_HEAD , "bpf_list_head" );
34683477 field_mask_test_name (BPF_LIST_NODE , "bpf_list_node" );
34693478 field_mask_test_name (BPF_RB_ROOT , "bpf_rb_root" );
@@ -3515,6 +3524,7 @@ static int btf_find_struct_field(const struct btf *btf,
35153524 switch (field_type ) {
35163525 case BPF_SPIN_LOCK :
35173526 case BPF_TIMER :
3527+ case BPF_WORKQUEUE :
35183528 case BPF_LIST_NODE :
35193529 case BPF_RB_NODE :
35203530 case BPF_REFCOUNT :
@@ -3582,6 +3592,7 @@ static int btf_find_datasec_var(const struct btf *btf, const struct btf_type *t,
35823592 switch (field_type ) {
35833593 case BPF_SPIN_LOCK :
35843594 case BPF_TIMER :
3595+ case BPF_WORKQUEUE :
35853596 case BPF_LIST_NODE :
35863597 case BPF_RB_NODE :
35873598 case BPF_REFCOUNT :
@@ -3816,6 +3827,7 @@ struct btf_record *btf_parse_fields(const struct btf *btf, const struct btf_type
38163827
38173828 rec -> spin_lock_off = - EINVAL ;
38183829 rec -> timer_off = - EINVAL ;
3830+ rec -> wq_off = - EINVAL ;
38193831 rec -> refcount_off = - EINVAL ;
38203832 for (i = 0 ; i < cnt ; i ++ ) {
38213833 field_type_size = btf_field_type_size (info_arr [i ].type );
@@ -3846,6 +3858,11 @@ struct btf_record *btf_parse_fields(const struct btf *btf, const struct btf_type
38463858 /* Cache offset for faster lookup at runtime */
38473859 rec -> timer_off = rec -> fields [i ].offset ;
38483860 break ;
3861+ case BPF_WORKQUEUE :
3862+ WARN_ON_ONCE (rec -> wq_off >= 0 );
3863+ /* Cache offset for faster lookup at runtime */
3864+ rec -> wq_off = rec -> fields [i ].offset ;
3865+ break ;
38493866 case BPF_REFCOUNT :
38503867 WARN_ON_ONCE (rec -> refcount_off >= 0 );
38513868 /* Cache offset for faster lookup at runtime */
0 commit comments