Lines Matching refs:fmsg

33 	struct devlink_fmsg *fmsg;  in devlink_fmsg_alloc()  local
35 fmsg = kzalloc(sizeof(*fmsg), GFP_KERNEL); in devlink_fmsg_alloc()
36 if (!fmsg) in devlink_fmsg_alloc()
39 INIT_LIST_HEAD(&fmsg->item_list); in devlink_fmsg_alloc()
41 return fmsg; in devlink_fmsg_alloc()
44 static void devlink_fmsg_free(struct devlink_fmsg *fmsg) in devlink_fmsg_free() argument
48 list_for_each_entry_safe(item, tmp, &fmsg->item_list, list) { in devlink_fmsg_free()
52 kfree(fmsg); in devlink_fmsg_free()
677 static void devlink_fmsg_err_if_binary(struct devlink_fmsg *fmsg) in devlink_fmsg_err_if_binary() argument
679 if (!fmsg->err && fmsg->putting_binary) in devlink_fmsg_err_if_binary()
680 fmsg->err = -EINVAL; in devlink_fmsg_err_if_binary()
683 static void devlink_fmsg_nest_common(struct devlink_fmsg *fmsg, int attrtype) in devlink_fmsg_nest_common() argument
687 if (fmsg->err) in devlink_fmsg_nest_common()
692 fmsg->err = -ENOMEM; in devlink_fmsg_nest_common()
697 list_add_tail(&item->list, &fmsg->item_list); in devlink_fmsg_nest_common()
700 void devlink_fmsg_obj_nest_start(struct devlink_fmsg *fmsg) in devlink_fmsg_obj_nest_start() argument
702 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_obj_nest_start()
703 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_OBJ_NEST_START); in devlink_fmsg_obj_nest_start()
707 static void devlink_fmsg_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_nest_end() argument
709 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_nest_end()
710 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_NEST_END); in devlink_fmsg_nest_end()
713 void devlink_fmsg_obj_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_obj_nest_end() argument
715 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_obj_nest_end()
721 static void devlink_fmsg_put_name(struct devlink_fmsg *fmsg, const char *name) in devlink_fmsg_put_name() argument
725 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_put_name()
726 if (fmsg->err) in devlink_fmsg_put_name()
730 fmsg->err = -EMSGSIZE; in devlink_fmsg_put_name()
736 fmsg->err = -ENOMEM; in devlink_fmsg_put_name()
744 list_add_tail(&item->list, &fmsg->item_list); in devlink_fmsg_put_name()
747 void devlink_fmsg_pair_nest_start(struct devlink_fmsg *fmsg, const char *name) in devlink_fmsg_pair_nest_start() argument
749 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_pair_nest_start()
750 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_PAIR_NEST_START); in devlink_fmsg_pair_nest_start()
751 devlink_fmsg_put_name(fmsg, name); in devlink_fmsg_pair_nest_start()
755 void devlink_fmsg_pair_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_pair_nest_end() argument
757 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_pair_nest_end()
761 void devlink_fmsg_arr_pair_nest_start(struct devlink_fmsg *fmsg, in devlink_fmsg_arr_pair_nest_start() argument
764 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_arr_pair_nest_start()
765 devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_ARR_NEST_START); in devlink_fmsg_arr_pair_nest_start()
769 void devlink_fmsg_arr_pair_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_arr_pair_nest_end() argument
771 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_arr_pair_nest_end()
772 devlink_fmsg_nest_end(fmsg); in devlink_fmsg_arr_pair_nest_end()
776 void devlink_fmsg_binary_pair_nest_start(struct devlink_fmsg *fmsg, in devlink_fmsg_binary_pair_nest_start() argument
779 devlink_fmsg_arr_pair_nest_start(fmsg, name); in devlink_fmsg_binary_pair_nest_start()
780 fmsg->putting_binary = true; in devlink_fmsg_binary_pair_nest_start()
784 void devlink_fmsg_binary_pair_nest_end(struct devlink_fmsg *fmsg) in devlink_fmsg_binary_pair_nest_end() argument
786 if (fmsg->err) in devlink_fmsg_binary_pair_nest_end()
789 if (!fmsg->putting_binary) in devlink_fmsg_binary_pair_nest_end()
790 fmsg->err = -EINVAL; in devlink_fmsg_binary_pair_nest_end()
792 fmsg->putting_binary = false; in devlink_fmsg_binary_pair_nest_end()
793 devlink_fmsg_arr_pair_nest_end(fmsg); in devlink_fmsg_binary_pair_nest_end()
797 static void devlink_fmsg_put_value(struct devlink_fmsg *fmsg, in devlink_fmsg_put_value() argument
803 if (fmsg->err) in devlink_fmsg_put_value()
807 fmsg->err = -EMSGSIZE; in devlink_fmsg_put_value()
813 fmsg->err = -ENOMEM; in devlink_fmsg_put_value()
821 list_add_tail(&item->list, &fmsg->item_list); in devlink_fmsg_put_value()
824 static void devlink_fmsg_bool_put(struct devlink_fmsg *fmsg, bool value) in devlink_fmsg_bool_put() argument
826 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_bool_put()
827 devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_FLAG); in devlink_fmsg_bool_put()
830 static void devlink_fmsg_u8_put(struct devlink_fmsg *fmsg, u8 value) in devlink_fmsg_u8_put() argument
832 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_u8_put()
833 devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_U8); in devlink_fmsg_u8_put()
836 void devlink_fmsg_u32_put(struct devlink_fmsg *fmsg, u32 value) in devlink_fmsg_u32_put() argument
838 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_u32_put()
839 devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_U32); in devlink_fmsg_u32_put()
843 static void devlink_fmsg_u64_put(struct devlink_fmsg *fmsg, u64 value) in devlink_fmsg_u64_put() argument
845 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_u64_put()
846 devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_U64); in devlink_fmsg_u64_put()
849 void devlink_fmsg_string_put(struct devlink_fmsg *fmsg, const char *value) in devlink_fmsg_string_put() argument
851 devlink_fmsg_err_if_binary(fmsg); in devlink_fmsg_string_put()
852 devlink_fmsg_put_value(fmsg, value, strlen(value) + 1, NLA_NUL_STRING); in devlink_fmsg_string_put()
856 void devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value, in devlink_fmsg_binary_put() argument
859 if (!fmsg->err && !fmsg->putting_binary) in devlink_fmsg_binary_put()
860 fmsg->err = -EINVAL; in devlink_fmsg_binary_put()
862 devlink_fmsg_put_value(fmsg, value, value_len, NLA_BINARY); in devlink_fmsg_binary_put()
866 void devlink_fmsg_bool_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_bool_pair_put() argument
869 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_bool_pair_put()
870 devlink_fmsg_bool_put(fmsg, value); in devlink_fmsg_bool_pair_put()
871 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_bool_pair_put()
875 void devlink_fmsg_u8_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_u8_pair_put() argument
878 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_u8_pair_put()
879 devlink_fmsg_u8_put(fmsg, value); in devlink_fmsg_u8_pair_put()
880 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_u8_pair_put()
884 void devlink_fmsg_u32_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_u32_pair_put() argument
887 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_u32_pair_put()
888 devlink_fmsg_u32_put(fmsg, value); in devlink_fmsg_u32_pair_put()
889 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_u32_pair_put()
893 void devlink_fmsg_u64_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_u64_pair_put() argument
896 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_u64_pair_put()
897 devlink_fmsg_u64_put(fmsg, value); in devlink_fmsg_u64_pair_put()
898 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_u64_pair_put()
902 void devlink_fmsg_string_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_string_pair_put() argument
905 devlink_fmsg_pair_nest_start(fmsg, name); in devlink_fmsg_string_pair_put()
906 devlink_fmsg_string_put(fmsg, value); in devlink_fmsg_string_pair_put()
907 devlink_fmsg_pair_nest_end(fmsg); in devlink_fmsg_string_pair_put()
911 void devlink_fmsg_binary_pair_put(struct devlink_fmsg *fmsg, const char *name, in devlink_fmsg_binary_pair_put() argument
917 devlink_fmsg_binary_pair_nest_start(fmsg, name); in devlink_fmsg_binary_pair_put()
924 devlink_fmsg_binary_put(fmsg, value + offset, data_size); in devlink_fmsg_binary_pair_put()
927 devlink_fmsg_binary_pair_nest_end(fmsg); in devlink_fmsg_binary_pair_put()
928 fmsg->putting_binary = false; in devlink_fmsg_binary_pair_put()
978 devlink_fmsg_prepare_skb(struct devlink_fmsg *fmsg, struct sk_buff *skb, in devlink_fmsg_prepare_skb() argument
990 list_for_each_entry(item, &fmsg->item_list, list) { in devlink_fmsg_prepare_skb()
1027 static int devlink_fmsg_snd(struct devlink_fmsg *fmsg, in devlink_fmsg_snd() argument
1038 if (fmsg->err) in devlink_fmsg_snd()
1039 return fmsg->err; in devlink_fmsg_snd()
1055 err = devlink_fmsg_prepare_skb(fmsg, skb, &index); in devlink_fmsg_snd()
1084 static int devlink_fmsg_dumpit(struct devlink_fmsg *fmsg, struct sk_buff *skb, in devlink_fmsg_dumpit() argument
1094 if (fmsg->err) in devlink_fmsg_dumpit()
1095 return fmsg->err; in devlink_fmsg_dumpit()
1104 err = devlink_fmsg_prepare_skb(fmsg, skb, &index); in devlink_fmsg_dumpit()
1122 struct devlink_fmsg *fmsg; in devlink_nl_health_reporter_diagnose_doit() local
1132 fmsg = devlink_fmsg_alloc(); in devlink_nl_health_reporter_diagnose_doit()
1133 if (!fmsg) in devlink_nl_health_reporter_diagnose_doit()
1136 devlink_fmsg_obj_nest_start(fmsg); in devlink_nl_health_reporter_diagnose_doit()
1138 err = reporter->ops->diagnose(reporter, fmsg, info->extack); in devlink_nl_health_reporter_diagnose_doit()
1142 devlink_fmsg_obj_nest_end(fmsg); in devlink_nl_health_reporter_diagnose_doit()
1144 err = devlink_fmsg_snd(fmsg, info, in devlink_nl_health_reporter_diagnose_doit()
1148 devlink_fmsg_free(fmsg); in devlink_nl_health_reporter_diagnose_doit()