Lines Matching refs:nt
183 static void netconsole_target_get(struct netconsole_target *nt) in netconsole_target_get() argument
185 if (config_item_name(&nt->group.cg_item)) in netconsole_target_get()
186 config_group_get(&nt->group); in netconsole_target_get()
189 static void netconsole_target_put(struct netconsole_target *nt) in netconsole_target_put() argument
191 if (config_item_name(&nt->group.cg_item)) in netconsole_target_put()
192 config_group_put(&nt->group); in netconsole_target_put()
210 static void netconsole_target_get(struct netconsole_target *nt) in netconsole_target_get() argument
214 static void netconsole_target_put(struct netconsole_target *nt) in netconsole_target_put() argument
218 static void populate_configfs_item(struct netconsole_target *nt, in populate_configfs_item() argument
229 struct netconsole_target *nt; in alloc_and_init() local
231 nt = kzalloc(sizeof(*nt), GFP_KERNEL); in alloc_and_init()
232 if (!nt) in alloc_and_init()
233 return nt; in alloc_and_init()
236 nt->extended = true; in alloc_and_init()
238 nt->release = true; in alloc_and_init()
240 nt->np.name = "netconsole"; in alloc_and_init()
241 strscpy(nt->np.dev_name, "eth0", IFNAMSIZ); in alloc_and_init()
242 nt->np.local_port = 6665; in alloc_and_init()
243 nt->np.remote_port = 6666; in alloc_and_init()
244 eth_broadcast_addr(nt->np.remote_mac); in alloc_and_init()
246 return nt; in alloc_and_init()
254 struct netconsole_target *nt, *tmp; in netconsole_process_cleanups_core() local
261 list_for_each_entry_safe(nt, tmp, &target_cleanup_list, list) { in netconsole_process_cleanups_core()
263 WARN_ON_ONCE(nt->enabled); in netconsole_process_cleanups_core()
264 do_netpoll_cleanup(&nt->np); in netconsole_process_cleanups_core()
269 list_move(&nt->list, &target_list); in netconsole_process_cleanups_core()
372 struct netconsole_target *nt = to_target(item); in local_ip_show() local
374 if (nt->np.ipv6) in local_ip_show()
375 return sysfs_emit(buf, "%pI6c\n", &nt->np.local_ip.in6); in local_ip_show()
377 return sysfs_emit(buf, "%pI4\n", &nt->np.local_ip); in local_ip_show()
382 struct netconsole_target *nt = to_target(item); in remote_ip_show() local
384 if (nt->np.ipv6) in remote_ip_show()
385 return sysfs_emit(buf, "%pI6c\n", &nt->np.remote_ip.in6); in remote_ip_show()
387 return sysfs_emit(buf, "%pI4\n", &nt->np.remote_ip); in remote_ip_show()
405 struct netconsole_target *nt = to_target(item); in transmit_errors_show() local
410 start = u64_stats_fetch_begin(&nt->stats.syncp); in transmit_errors_show()
411 xmit_drop_count = u64_stats_read(&nt->stats.xmit_drop_count); in transmit_errors_show()
412 enomem_count = u64_stats_read(&nt->stats.enomem_count); in transmit_errors_show()
413 } while (u64_stats_fetch_retry(&nt->stats.syncp, start)); in transmit_errors_show()
421 struct netconsole_target *nt = to_target(item->ci_parent); in sysdata_cpu_nr_enabled_show() local
425 cpu_nr_enabled = !!(nt->sysdata_fields & SYSDATA_CPU_NR); in sysdata_cpu_nr_enabled_show()
435 struct netconsole_target *nt = to_target(item->ci_parent); in sysdata_taskname_enabled_show() local
439 taskname_enabled = !!(nt->sysdata_fields & SYSDATA_TASKNAME); in sysdata_taskname_enabled_show()
448 struct netconsole_target *nt = to_target(item->ci_parent); in sysdata_release_enabled_show() local
452 release_enabled = !!(nt->sysdata_fields & SYSDATA_TASKNAME); in sysdata_release_enabled_show()
468 struct netconsole_target *nt = to_target(item); in enabled_store() local
479 if (enabled == nt->enabled) { in enabled_store()
481 nt->enabled ? "started" : "stopped"); in enabled_store()
486 if (nt->release && !nt->extended) { in enabled_store()
491 if (nt->extended && !console_is_registered(&netconsole_ext)) in enabled_store()
498 netpoll_print_options(&nt->np); in enabled_store()
500 ret = netpoll_setup(&nt->np); in enabled_store()
504 nt->enabled = true; in enabled_store()
513 nt->enabled = false; in enabled_store()
517 list_move(&nt->list, &target_cleanup_list); in enabled_store()
533 struct netconsole_target *nt = to_target(item); in release_store() local
538 if (nt->enabled) { in release_store()
540 config_item_name(&nt->group.cg_item)); in release_store()
549 nt->release = release; in release_store()
560 struct netconsole_target *nt = to_target(item); in extended_store() local
565 if (nt->enabled) { in extended_store()
567 config_item_name(&nt->group.cg_item)); in extended_store()
576 nt->extended = extended; in extended_store()
586 struct netconsole_target *nt = to_target(item); in dev_name_store() local
589 if (nt->enabled) { in dev_name_store()
591 config_item_name(&nt->group.cg_item)); in dev_name_store()
596 strscpy(nt->np.dev_name, buf, IFNAMSIZ); in dev_name_store()
597 trim_newline(nt->np.dev_name, IFNAMSIZ); in dev_name_store()
606 struct netconsole_target *nt = to_target(item); in local_port_store() local
610 if (nt->enabled) { in local_port_store()
612 config_item_name(&nt->group.cg_item)); in local_port_store()
616 ret = kstrtou16(buf, 10, &nt->np.local_port); in local_port_store()
628 struct netconsole_target *nt = to_target(item); in remote_port_store() local
632 if (nt->enabled) { in remote_port_store()
634 config_item_name(&nt->group.cg_item)); in remote_port_store()
638 ret = kstrtou16(buf, 10, &nt->np.remote_port); in remote_port_store()
650 struct netconsole_target *nt = to_target(item); in local_ip_store() local
654 if (nt->enabled) { in local_ip_store()
656 config_item_name(&nt->group.cg_item)); in local_ip_store()
663 if (in6_pton(buf, count, nt->np.local_ip.in6.s6_addr, -1, &end) > 0) { in local_ip_store()
668 nt->np.ipv6 = true; in local_ip_store()
672 if (!nt->np.ipv6) in local_ip_store()
673 nt->np.local_ip.ip = in_aton(buf); in local_ip_store()
687 struct netconsole_target *nt = to_target(item); in remote_ip_store() local
691 if (nt->enabled) { in remote_ip_store()
693 config_item_name(&nt->group.cg_item)); in remote_ip_store()
700 if (in6_pton(buf, count, nt->np.remote_ip.in6.s6_addr, -1, &end) > 0) { in remote_ip_store()
705 nt->np.ipv6 = true; in remote_ip_store()
709 if (!nt->np.ipv6) in remote_ip_store()
710 nt->np.remote_ip.ip = in_aton(buf); in remote_ip_store()
726 static size_t count_extradata_entries(struct netconsole_target *nt) in count_extradata_entries() argument
731 entries = list_count_nodes(&nt->userdata_group.cg_children); in count_extradata_entries()
733 if (nt->sysdata_fields & SYSDATA_CPU_NR) in count_extradata_entries()
735 if (nt->sysdata_fields & SYSDATA_TASKNAME) in count_extradata_entries()
737 if (nt->sysdata_fields & SYSDATA_RELEASE) in count_extradata_entries()
746 struct netconsole_target *nt = to_target(item); in remote_mac_store() local
751 if (nt->enabled) { in remote_mac_store()
753 config_item_name(&nt->group.cg_item)); in remote_mac_store()
761 memcpy(nt->np.remote_mac, remote_mac, ETH_ALEN); in remote_mac_store()
801 static void update_userdata(struct netconsole_target *nt) in update_userdata() argument
807 nt->userdata_length = 0; in update_userdata()
808 nt->extradata_complete[0] = 0; in update_userdata()
810 list_for_each(entry, &nt->userdata_group.cg_children) { in update_userdata()
829 complete_idx += scnprintf(&nt->extradata_complete[complete_idx], in update_userdata()
833 nt->userdata_length = strnlen(nt->extradata_complete, in update_userdata()
834 sizeof(nt->extradata_complete)); in update_userdata()
841 struct netconsole_target *nt; in userdatum_value_store() local
856 nt = userdata_to_target(ud); in userdatum_value_store()
857 update_userdata(nt); in userdatum_value_store()
868 static void disable_sysdata_feature(struct netconsole_target *nt, in disable_sysdata_feature() argument
871 nt->sysdata_fields &= ~feature; in disable_sysdata_feature()
872 nt->extradata_complete[nt->userdata_length] = 0; in disable_sysdata_feature()
878 struct netconsole_target *nt = to_target(item->ci_parent); in sysdata_release_enabled_store() local
887 curr = !!(nt->sysdata_fields & SYSDATA_RELEASE); in sysdata_release_enabled_store()
892 count_extradata_entries(nt) >= MAX_EXTRADATA_ITEMS) { in sysdata_release_enabled_store()
898 nt->sysdata_fields |= SYSDATA_RELEASE; in sysdata_release_enabled_store()
900 disable_sysdata_feature(nt, SYSDATA_RELEASE); in sysdata_release_enabled_store()
912 struct netconsole_target *nt = to_target(item->ci_parent); in sysdata_taskname_enabled_store() local
921 curr = !!(nt->sysdata_fields & SYSDATA_TASKNAME); in sysdata_taskname_enabled_store()
926 count_extradata_entries(nt) >= MAX_EXTRADATA_ITEMS) { in sysdata_taskname_enabled_store()
932 nt->sysdata_fields |= SYSDATA_TASKNAME; in sysdata_taskname_enabled_store()
934 disable_sysdata_feature(nt, SYSDATA_TASKNAME); in sysdata_taskname_enabled_store()
947 struct netconsole_target *nt = to_target(item->ci_parent); in sysdata_cpu_nr_enabled_store() local
956 curr = !!(nt->sysdata_fields & SYSDATA_CPU_NR); in sysdata_cpu_nr_enabled_store()
962 count_extradata_entries(nt) >= MAX_EXTRADATA_ITEMS) { in sysdata_cpu_nr_enabled_store()
971 nt->sysdata_fields |= SYSDATA_CPU_NR; in sysdata_cpu_nr_enabled_store()
977 disable_sysdata_feature(nt, SYSDATA_CPU_NR); in sysdata_cpu_nr_enabled_store()
1014 struct netconsole_target *nt; in userdatum_make_item() local
1022 nt = userdata_to_target(ud); in userdatum_make_item()
1023 if (count_extradata_entries(nt) >= MAX_EXTRADATA_ITEMS) in userdatum_make_item()
1036 struct netconsole_target *nt; in userdatum_drop() local
1040 nt = userdata_to_target(ud); in userdatum_drop()
1043 update_userdata(nt); in userdatum_drop()
1113 static void init_target_config_group(struct netconsole_target *nt, in init_target_config_group() argument
1116 config_group_init_type_name(&nt->group, name, &netconsole_target_type); in init_target_config_group()
1117 config_group_init_type_name(&nt->userdata_group, "userdata", in init_target_config_group()
1119 configfs_add_default_group(&nt->userdata_group, &nt->group); in init_target_config_group()
1124 struct netconsole_target *nt, *ret = NULL; in find_cmdline_target() local
1128 list_for_each_entry(nt, &target_list, list) { in find_cmdline_target()
1129 if (!strcmp(nt->group.cg_item.ci_name, name)) { in find_cmdline_target()
1130 ret = nt; in find_cmdline_target()
1146 struct netconsole_target *nt; in make_netconsole_target() local
1155 nt = find_cmdline_target(name); in make_netconsole_target()
1156 if (nt) { in make_netconsole_target()
1157 init_target_config_group(nt, name); in make_netconsole_target()
1158 return &nt->group; in make_netconsole_target()
1162 nt = alloc_and_init(); in make_netconsole_target()
1163 if (!nt) in make_netconsole_target()
1167 init_target_config_group(nt, name); in make_netconsole_target()
1171 list_add(&nt->list, &target_list); in make_netconsole_target()
1174 return &nt->group; in make_netconsole_target()
1181 struct netconsole_target *nt = to_target(item); in drop_netconsole_target() local
1184 list_del(&nt->list); in drop_netconsole_target()
1191 if (nt->enabled) in drop_netconsole_target()
1192 netpoll_cleanup(&nt->np); in drop_netconsole_target()
1194 config_item_put(&nt->group.cg_item); in drop_netconsole_target()
1217 static void populate_configfs_item(struct netconsole_target *nt, in populate_configfs_item() argument
1224 init_target_config_group(nt, target_name); in populate_configfs_item()
1227 static int sysdata_append_cpu_nr(struct netconsole_target *nt, int offset) in sysdata_append_cpu_nr() argument
1230 return scnprintf(&nt->extradata_complete[offset], in sysdata_append_cpu_nr()
1235 static int sysdata_append_taskname(struct netconsole_target *nt, int offset) in sysdata_append_taskname() argument
1237 return scnprintf(&nt->extradata_complete[offset], in sysdata_append_taskname()
1242 static int sysdata_append_release(struct netconsole_target *nt, int offset) in sysdata_append_release() argument
1244 return scnprintf(&nt->extradata_complete[offset], in sysdata_append_release()
1253 static int prepare_extradata(struct netconsole_target *nt) in prepare_extradata() argument
1261 extradata_len = nt->userdata_length; in prepare_extradata()
1263 if (!(nt->sysdata_fields & fields)) in prepare_extradata()
1266 if (nt->sysdata_fields & SYSDATA_CPU_NR) in prepare_extradata()
1267 extradata_len += sysdata_append_cpu_nr(nt, extradata_len); in prepare_extradata()
1268 if (nt->sysdata_fields & SYSDATA_TASKNAME) in prepare_extradata()
1269 extradata_len += sysdata_append_taskname(nt, extradata_len); in prepare_extradata()
1270 if (nt->sysdata_fields & SYSDATA_RELEASE) in prepare_extradata()
1271 extradata_len += sysdata_append_release(nt, extradata_len); in prepare_extradata()
1280 static int prepare_extradata(struct netconsole_target *nt) in prepare_extradata() argument
1291 struct netconsole_target *nt, *tmp; in netconsole_netdev_event() local
1301 list_for_each_entry_safe(nt, tmp, &target_list, list) { in netconsole_netdev_event()
1302 netconsole_target_get(nt); in netconsole_netdev_event()
1303 if (nt->np.dev == dev) { in netconsole_netdev_event()
1306 strscpy(nt->np.dev_name, dev->name, IFNAMSIZ); in netconsole_netdev_event()
1311 nt->enabled = false; in netconsole_netdev_event()
1312 list_move(&nt->list, &target_cleanup_list); in netconsole_netdev_event()
1316 netconsole_target_put(nt); in netconsole_netdev_event()
1362 static void send_udp(struct netconsole_target *nt, const char *msg, int len) in send_udp() argument
1364 int result = netpoll_send_udp(&nt->np, msg, len); in send_udp()
1368 u64_stats_update_begin(&nt->stats.syncp); in send_udp()
1369 u64_stats_inc(&nt->stats.xmit_drop_count); in send_udp()
1370 u64_stats_update_end(&nt->stats.syncp); in send_udp()
1372 u64_stats_update_begin(&nt->stats.syncp); in send_udp()
1373 u64_stats_inc(&nt->stats.enomem_count); in send_udp()
1374 u64_stats_update_end(&nt->stats.syncp); in send_udp()
1379 static void send_msg_no_fragmentation(struct netconsole_target *nt, in send_msg_no_fragmentation() argument
1388 extradata = nt->extradata_complete; in send_msg_no_fragmentation()
1394 scnprintf(nt->buf, MAX_PRINT_CHUNK, "%s,%s", release, msg); in send_msg_no_fragmentation()
1397 memcpy(nt->buf, msg, msg_len); in send_msg_no_fragmentation()
1401 msg_len += scnprintf(&nt->buf[msg_len], in send_msg_no_fragmentation()
1405 send_udp(nt, nt->buf, msg_len); in send_msg_no_fragmentation()
1416 static void send_fragmented_body(struct netconsole_target *nt, in send_fragmented_body() argument
1425 extradata = nt->extradata_complete; in send_fragmented_body()
1446 this_header += scnprintf(nt->buf + this_header, in send_fragmented_body()
1457 memcpy(nt->buf + this_header, msgbody + offset, in send_fragmented_body()
1492 memcpy(nt->buf + this_header + this_offset, in send_fragmented_body()
1498 send_udp(nt, nt->buf, this_header + this_offset); in send_fragmented_body()
1503 static void send_msg_fragmented(struct netconsole_target *nt, in send_msg_fragmented() argument
1526 append_release(nt->buf); in send_msg_fragmented()
1529 memcpy(nt->buf + release_len, msg, header_len); in send_msg_fragmented()
1535 send_fragmented_body(nt, msgbody, header_len, msgbody_len, in send_msg_fragmented()
1549 static void send_ext_msg_udp(struct netconsole_target *nt, const char *msg, in send_ext_msg_udp() argument
1555 extradata_len = prepare_extradata(nt); in send_ext_msg_udp()
1557 if (nt->release) in send_ext_msg_udp()
1561 return send_msg_no_fragmentation(nt, msg, msg_len, release_len); in send_ext_msg_udp()
1563 return send_msg_fragmented(nt, msg, msg_len, release_len, in send_ext_msg_udp()
1570 struct netconsole_target *nt; in write_ext_msg() local
1577 list_for_each_entry(nt, &target_list, list) in write_ext_msg()
1578 if (nt->extended && nt->enabled && netif_running(nt->np.dev)) in write_ext_msg()
1579 send_ext_msg_udp(nt, msg, len); in write_ext_msg()
1587 struct netconsole_target *nt; in write_msg() local
1597 list_for_each_entry(nt, &target_list, list) { in write_msg()
1598 if (!nt->extended && nt->enabled && netif_running(nt->np.dev)) { in write_msg()
1608 send_udp(nt, tmp, frag); in write_msg()
1621 struct netconsole_target *nt; in alloc_param_target() local
1624 nt = alloc_and_init(); in alloc_param_target()
1625 if (!nt) { in alloc_param_target()
1631 nt->extended = true; in alloc_param_target()
1636 if (!nt->extended) { in alloc_param_target()
1641 nt->release = true; in alloc_param_target()
1646 err = netpoll_parse_options(&nt->np, target_config); in alloc_param_target()
1650 err = netpoll_setup(&nt->np); in alloc_param_target()
1660 nt->enabled = true; in alloc_param_target()
1662 populate_configfs_item(nt, cmdline_count); in alloc_param_target()
1664 return nt; in alloc_param_target()
1667 kfree(nt); in alloc_param_target()
1672 static void free_param_target(struct netconsole_target *nt) in free_param_target() argument
1674 netpoll_cleanup(&nt->np); in free_param_target()
1675 kfree(nt); in free_param_target()
1693 struct netconsole_target *nt, *tmp; in init_netconsole() local
1702 nt = alloc_param_target(target_config, count); in init_netconsole()
1703 if (IS_ERR(nt)) { in init_netconsole()
1706 err = PTR_ERR(nt); in init_netconsole()
1710 if (nt->extended) { in init_netconsole()
1718 list_add(&nt->list, &target_list); in init_netconsole()
1750 list_for_each_entry_safe(nt, tmp, &target_list, list) { in init_netconsole()
1751 list_del(&nt->list); in init_netconsole()
1752 free_param_target(nt); in init_netconsole()
1760 struct netconsole_target *nt, *tmp; in cleanup_netconsole() local
1776 list_for_each_entry_safe(nt, tmp, &target_list, list) { in cleanup_netconsole()
1777 list_del(&nt->list); in cleanup_netconsole()
1778 free_param_target(nt); in cleanup_netconsole()