diff mbox series

[net-next,v4,12/12] net: homa: create Makefile and Kconfig

Message ID 20241217000626.2958-13-ouster@cs.stanford.edu (mailing list archive)
State Changes Requested
Delegated to: Netdev Maintainers
Headers show
Series Begin upstreaming Homa transport protocol | expand

Checks

Context Check Description
netdev/series_format success Posting correctly formatted
netdev/tree_selection success Clearly marked for net-next, async
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 0 this patch: 0
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers success CCed 6 of 6 maintainers
netdev/build_clang success Errors and warnings before: 135 this patch: 135
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 4 this patch: 4
netdev/checkpatch warning WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

John Ousterhout Dec. 17, 2024, 12:06 a.m. UTC
Before this commit the Homa code is "inert": it won't be compiled
in kernel builds. This commit adds Homa's Makefile and Kconfig, and
also links Homa into net/Makefile and net/Kconfig, so that Homa
will be built during kernel builds if enabled (it is disabled by
default).

Signed-off-by: John Ousterhout <ouster@cs.stanford.edu>
---
 net/Kconfig       |  1 +
 net/Makefile      |  1 +
 net/homa/Kconfig  | 19 +++++++++++++++++++
 net/homa/Makefile | 14 ++++++++++++++
 4 files changed, 35 insertions(+)
 create mode 100644 net/homa/Kconfig
 create mode 100644 net/homa/Makefile

Comments

Oliver Sang Dec. 25, 2024, 2:26 a.m. UTC | #1
Hello,

kernel test robot noticed "WARNING:possible_circular_locking_dependency_detected" on:

commit: 087197983ce53b12680eedd496208567f189fbb6 ("[PATCH net-next v4 12/12] net: homa: create Makefile and Kconfig")
url: https://github.com/intel-lab-lkp/linux/commits/John-Ousterhout/inet-homa-define-user-visible-API-for-Homa/20241217-081126
base: https://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git bc6a5efe3dcd9ada8d76eeb69039a11a86add39b
patch link: https://lore.kernel.org/all/20241217000626.2958-13-ouster@cs.stanford.edu/
patch subject: [PATCH net-next v4 12/12] net: homa: create Makefile and Kconfig

in testcase: trinity
version: 
with following parameters:

	runtime: 600s



config: x86_64-randconfig-075-20241223
compiler: gcc-12
test machine: qemu-system-x86_64 -enable-kvm -cpu SandyBridge -smp 2 -m 16G

(please refer to attached dmesg/kmsg for entire log/backtrace)


+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+------------+
|                                                                                                                                                                    | 3a0d944318 | 087197983c |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+------------+
| WARNING:possible_circular_locking_dependency_detected                                                                                                              | 0          | 21         |
| WARNING:possible_circular_locking_dependency_detected_homa_timer_is_trying_to_acquire_lock:at:down_trylock_but_task_is_already_holding_lock:at:__debug_object_init | 0          | 21         |
| WARNING:at_lib/debugobjects.c:#lookup_object_or_alloc                                                                                                              | 0          | 21         |
| RIP:lookup_object_or_alloc                                                                                                                                         | 0          | 21         |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+------------+


If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <oliver.sang@intel.com>
| Closes: https://lore.kernel.org/oe-lkp/202412251044.574ee2c0-lkp@intel.com


[   11.584244][  T133] WARNING: possible circular locking dependency detected
[   11.584248][  T133] 6.13.0-rc2-00436-g087197983ce5 #1 Not tainted
[   11.584253][  T133] ------------------------------------------------------
[   11.584256][  T133] homa_timer/133 is trying to acquire lock:
[ 11.584261][ T133] ffffffff8c9b9318 ((console_sem).lock){-...}-{2:2}, at: down_trylock (kernel/locking/semaphore.c:140)
[   11.585197][  T133]
[   11.585197][  T133] but task is already holding lock:
[ 11.585197][ T133] ffffffff9165dbb0 (&obj_hash[i].lock){-.-.}-{2:2}, at: __debug_object_init (lib/debugobjects.c:662 lib/debugobjects.c:743)
[   11.585197][  T133]
[   11.585197][  T133] which lock already depends on the new lock.
[   11.585197][  T133]
[   11.585197][  T133] the existing dependency chain (in reverse order) is:
[   11.585197][  T133]
[   11.585197][  T133] -> #3 (&obj_hash[i].lock){-.-.}-{2:2}:
[ 11.585197][ T133] __lock_acquire (kernel/locking/lockdep.c:5226)
[ 11.585197][ T133] lock_acquire (kernel/locking/lockdep.c:467 kernel/locking/lockdep.c:5851 kernel/locking/lockdep.c:5814)
[ 11.585197][ T133] _raw_spin_lock_irqsave (include/linux/spinlock_api_smp.h:111 kernel/locking/spinlock.c:162)
[ 11.585197][ T133] debug_object_assert_init (lib/debugobjects.c:1007)
[ 11.585197][ T133] __mod_timer (kernel/time/timer.c:1078)
[ 11.585197][ T133] add_timer_global (kernel/time/timer.c:1330)
[ 11.585197][ T133] __queue_delayed_work (kernel/workqueue.c:2527)
[ 11.585197][ T133] queue_delayed_work_on (kernel/workqueue.c:2553)
[ 11.585197][ T133] psi_task_change (kernel/sched/psi.c:913 (discriminator 1))
[ 11.585197][ T133] enqueue_task (kernel/sched/core.c:2070)
[ 11.585197][ T133] wake_up_new_task (kernel/sched/core.c:2110 kernel/sched/core.c:4870)
[ 11.585197][ T133] kernel_clone (kernel/fork.c:2841)
[ 11.585197][ T133] user_mode_thread (kernel/fork.c:2876)
[ 11.585197][ T133] rest_init (init/main.c:712)
[ 11.585197][ T133] start_kernel (init/main.c:1052 (discriminator 1))
[ 11.585197][ T133] x86_64_start_reservations (arch/x86/kernel/head64.c:495)
[ 11.585197][ T133] x86_64_start_kernel (arch/x86/kernel/head64.c:437 (discriminator 17))
[ 11.585197][ T133] common_startup_64 (arch/x86/kernel/head_64.S:415)
[   11.585197][  T133]
[   11.585197][  T133] -> #2 (&rq->__lock){-.-.}-{2:2}:
[ 11.585197][ T133] __lock_acquire (kernel/locking/lockdep.c:5226)
[ 11.585197][ T133] lock_acquire (kernel/locking/lockdep.c:467 kernel/locking/lockdep.c:5851 kernel/locking/lockdep.c:5814)
[ 11.585197][ T133] _raw_spin_lock_nested (kernel/locking/spinlock.c:379)
[ 11.585197][ T133] raw_spin_rq_lock_nested (arch/x86/include/asm/preempt.h:84 kernel/sched/core.c:600)
[ 11.585197][ T133] task_rq_lock (kernel/sched/core.c:718)
[ 11.585197][ T133] cgroup_move_task (kernel/sched/psi.c:1187)
[ 11.585197][ T133] css_set_move_task (kernel/cgroup/cgroup.c:899 (discriminator 3))
[ 11.585197][ T133] cgroup_post_fork (kernel/cgroup/cgroup.c:6697)
[ 11.585197][ T133] copy_process (kernel/fork.c:2622)
[ 11.585197][ T133] kernel_clone (include/linux/random.h:26 kernel/fork.c:2808)
[ 11.585197][ T133] user_mode_thread (kernel/fork.c:2876)
[ 11.585197][ T133] rest_init (init/main.c:712)
[ 11.585197][ T133] start_kernel (init/main.c:1052 (discriminator 1))
[ 11.585197][ T133] x86_64_start_reservations (arch/x86/kernel/head64.c:495)
[ 11.585197][ T133] x86_64_start_kernel (arch/x86/kernel/head64.c:437 (discriminator 17))
[ 11.585197][ T133] common_startup_64 (arch/x86/kernel/head_64.S:415)
[   11.585197][  T133]
[   11.585197][  T133] -> #1 (&p->pi_lock){-.-.}-{2:2}:
[ 11.585197][ T133] __lock_acquire (kernel/locking/lockdep.c:5226)
[ 11.585197][ T133] lock_acquire (kernel/locking/lockdep.c:467 kernel/locking/lockdep.c:5851 kernel/locking/lockdep.c:5814)
[ 11.585197][ T133] _raw_spin_lock_irqsave (include/linux/spinlock_api_smp.h:111 kernel/locking/spinlock.c:162)
[ 11.585197][ T133] try_to_wake_up (kernel/sched/core.c:2197 kernel/sched/core.c:4025 kernel/sched/core.c:4207)
[ 11.585197][ T133] up (kernel/locking/semaphore.c:191)
[ 11.585197][ T133] __up_console_sem (kernel/printk/printk.c:344 (discriminator 1))
[ 11.585197][ T133] console_unlock (kernel/printk/printk.c:2870 kernel/printk/printk.c:3271 kernel/printk/printk.c:3309)
[ 11.585197][ T133] vga_remove_vgacon (drivers/pci/vgaarb.c:188 drivers/pci/vgaarb.c:167)
[ 11.585197][ T133] aperture_remove_conflicting_pci_devices (drivers/video/aperture.c:331 drivers/video/aperture.c:369)
[ 11.585197][ T133] bochs_pci_probe (drivers/gpu/drm/tiny/bochs.c:724)
[ 11.585197][ T133] local_pci_probe (drivers/pci/pci-driver.c:325)
[ 11.585197][ T133] pci_call_probe (drivers/pci/pci-driver.c:392)
[ 11.585197][ T133] pci_device_probe (drivers/pci/pci-driver.c:452)
[ 11.585197][ T133] really_probe (drivers/base/dd.c:579 drivers/base/dd.c:658)
[ 11.585197][ T133] __driver_probe_device (drivers/base/dd.c:800)
[ 11.585197][ T133] driver_probe_device (drivers/base/dd.c:831)
[ 11.585197][ T133] __driver_attach (drivers/base/dd.c:1217)
[ 11.585197][ T133] bus_for_each_dev (drivers/base/bus.c:369)
[ 11.585197][ T133] bus_add_driver (drivers/base/bus.c:676)
[ 11.585197][ T133] driver_register (drivers/base/driver.c:247)
[ 11.585197][ T133] bochs_pci_driver_init (include/drm/drm_module.h:69 drivers/gpu/drm/tiny/bochs.c:806)
[ 11.585197][ T133] do_one_initcall (init/main.c:1267)
[ 11.585197][ T133] do_initcalls (init/main.c:1327 init/main.c:1344)
[ 11.585197][ T133] kernel_init_freeable (init/main.c:1581)
[ 11.585197][ T133] kernel_init (init/main.c:1468)
[ 11.585197][ T133] ret_from_fork (arch/x86/kernel/process.c:153)
[ 11.585197][ T133] ret_from_fork_asm (arch/x86/entry/entry_64.S:254)
[   11.585197][  T133]
[   11.585197][  T133] -> #0 ((console_sem).lock){-...}-{2:2}:
[ 11.585197][ T133] check_prev_add (kernel/locking/lockdep.c:3162)
[ 11.585197][ T133] validate_chain (kernel/locking/lockdep.c:3281 kernel/locking/lockdep.c:3904)
[ 11.585197][ T133] __lock_acquire (kernel/locking/lockdep.c:5226)
[ 11.585197][ T133] lock_acquire (kernel/locking/lockdep.c:467 kernel/locking/lockdep.c:5851 kernel/locking/lockdep.c:5814)
[ 11.585197][ T133] _raw_spin_lock_irqsave (include/linux/spinlock_api_smp.h:111 kernel/locking/spinlock.c:162)
[ 11.585197][ T133] down_trylock (kernel/locking/semaphore.c:140)
[ 11.585197][ T133] __down_trylock_console_sem (kernel/printk/printk.c:326)
[ 11.585197][ T133] console_trylock_spinning (kernel/printk/printk.c:2852 kernel/printk/printk.c:2009)
[ 11.585197][ T133] vprintk_emit (kernel/printk/printk.c:2431 kernel/printk/printk.c:2378)
[ 11.585197][ T133] vprintk (kernel/printk/printk_safe.c:86)
[ 11.585197][ T133] _printk (kernel/printk/printk.c:2452)
[ 11.585197][ T133] lookup_object_or_alloc+0x3d4/0x590
[ 11.585197][ T133] __debug_object_init (lib/debugobjects.c:744)
[ 11.585197][ T133] hrtimer_init (kernel/time/hrtimer.c:456 kernel/time/hrtimer.c:1606)
[ 11.585197][ T133] homa_timer_main (net/homa/homa_plumbing.c:971)
[ 11.585197][ T133] kthread (kernel/kthread.c:389)
[ 11.585197][ T133] ret_from_fork (arch/x86/kernel/process.c:153)
[ 11.585197][ T133] ret_from_fork_asm (arch/x86/entry/entry_64.S:254)
[   11.585197][  T133]
[   11.585197][  T133] other info that might help us debug this:
[   11.585197][  T133]
[   11.585197][  T133] Chain exists of:
[   11.585197][  T133]   (console_sem).lock --> &rq->__lock --> &obj_hash[i].lock
[   11.585197][  T133]
[   11.585197][  T133]  Possible unsafe locking scenario:
[   11.585197][  T133]
[   11.585197][  T133]        CPU0                    CPU1
[   11.585197][  T133]        ----                    ----
[   11.585197][  T133]   lock(&obj_hash[i].lock);
[   11.585197][  T133]                                lock(&rq->__lock);
[   11.585197][  T133]                                lock(&obj_hash[i].lock);
[   11.585197][  T133]   lock((console_sem).lock);
[   11.585197][  T133]
[   11.585197][  T133]  *** DEADLOCK ***
[   11.585197][  T133]
[   11.585197][  T133] 1 lock held by homa_timer/133:
[ 11.585197][ T133] #0: ffffffff9165dbb0 (&obj_hash[i].lock){-.-.}-{2:2}, at: __debug_object_init (lib/debugobjects.c:662 lib/debugobjects.c:743)
[   11.585197][  T133]
[   11.585197][  T133] stack backtrace:
[   11.585197][  T133] CPU: 0 UID: 0 PID: 133 Comm: homa_timer Not tainted 6.13.0-rc2-00436-g087197983ce5 #1
[   11.585197][  T133] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
[   11.585197][  T133] Call Trace:
[   11.585197][  T133]  <TASK>
[ 11.585197][ T133] dump_stack_lvl (lib/dump_stack.c:123)
[ 11.585197][ T133] print_circular_bug (kernel/locking/lockdep.c:2077)
[ 11.585197][ T133] check_noncircular (kernel/locking/lockdep.c:2206)
[ 11.585197][ T133] ? print_circular_bug (kernel/locking/lockdep.c:2182)
[ 11.585197][ T133] ? prb_read (kernel/printk/printk_ringbuffer.c:1909)
[ 11.585197][ T133] ? alloc_chain_hlocks (kernel/locking/lockdep.c:3528)
[ 11.585197][ T133] check_prev_add (kernel/locking/lockdep.c:3162)
[ 11.585197][ T133] ? lockdep_lock (arch/x86/include/asm/atomic.h:107 (discriminator 13) include/linux/atomic/atomic-arch-fallback.h:2170 (discriminator 13) include/linux/atomic/atomic-instrumented.h:1302 (discriminator 13) include/asm-generic/qspinlock.h:111 (discriminator 13) kernel/locking/lockdep.c:144 (discriminator 13))
[ 11.585197][ T133] validate_chain (kernel/locking/lockdep.c:3281 kernel/locking/lockdep.c:3904)
[ 11.585197][ T133] ? check_prev_add (kernel/locking/lockdep.c:3860)
[ 11.585197][ T133] ? mark_lock (kernel/locking/lockdep.c:4727 (discriminator 3))
[ 11.585197][ T133] __lock_acquire (kernel/locking/lockdep.c:5226)
[ 11.585197][ T133] lock_acquire (kernel/locking/lockdep.c:467 kernel/locking/lockdep.c:5851 kernel/locking/lockdep.c:5814)
[ 11.585197][ T133] ? down_trylock (kernel/locking/semaphore.c:140)
[ 11.585197][ T133] ? lock_sync (kernel/locking/lockdep.c:5817)
[ 11.585197][ T133] ? validate_chain (kernel/locking/lockdep.c:3797 kernel/locking/lockdep.c:3817 kernel/locking/lockdep.c:3872)
[ 11.585197][ T133] _raw_spin_lock_irqsave (include/linux/spinlock_api_smp.h:111 kernel/locking/spinlock.c:162)
[ 11.585197][ T133] ? down_trylock (kernel/locking/semaphore.c:140)
[ 11.585197][ T133] ? vprintk_emit (kernel/printk/printk.c:2431 kernel/printk/printk.c:2378)
[ 11.585197][ T133] down_trylock (kernel/locking/semaphore.c:140)
[ 11.585197][ T133] __down_trylock_console_sem (kernel/printk/printk.c:326)
[ 11.585197][ T133] console_trylock_spinning (kernel/printk/printk.c:2852 kernel/printk/printk.c:2009)
[ 11.585197][ T133] vprintk_emit (kernel/printk/printk.c:2431 kernel/printk/printk.c:2378)
[ 11.585197][ T133] ? wake_up_klogd_work_func (kernel/printk/printk.c:2381)
[ 11.585197][ T133] vprintk (kernel/printk/printk_safe.c:86)
[ 11.585197][ T133] _printk (kernel/printk/printk.c:2452)
[ 11.585197][ T133] ? printk_get_console_flush_type (kernel/printk/printk.c:2452)


The kernel config and materials to reproduce are available at:
https://download.01.org/0day-ci/archive/20241225/202412251044.574ee2c0-lkp@intel.com
diff mbox series

Patch

diff --git a/net/Kconfig b/net/Kconfig
index a629f92dc86b..ca8551c1a226 100644
--- a/net/Kconfig
+++ b/net/Kconfig
@@ -244,6 +244,7 @@  endif
 
 source "net/dccp/Kconfig"
 source "net/sctp/Kconfig"
+source "net/homa/Kconfig"
 source "net/rds/Kconfig"
 source "net/tipc/Kconfig"
 source "net/atm/Kconfig"
diff --git a/net/Makefile b/net/Makefile
index 65bb8c72a35e..18fa3c323187 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -44,6 +44,7 @@  obj-y				+= 8021q/
 endif
 obj-$(CONFIG_IP_DCCP)		+= dccp/
 obj-$(CONFIG_IP_SCTP)		+= sctp/
+obj-$(CONFIG_HOMA)              += homa/
 obj-$(CONFIG_RDS)		+= rds/
 obj-$(CONFIG_WIRELESS)		+= wireless/
 obj-$(CONFIG_MAC80211)		+= mac80211/
diff --git a/net/homa/Kconfig b/net/homa/Kconfig
new file mode 100644
index 000000000000..3e623906612f
--- /dev/null
+++ b/net/homa/Kconfig
@@ -0,0 +1,19 @@ 
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Homa transport protocol
+#
+
+menuconfig HOMA
+	tristate "The Homa transport protocol"
+	depends on INET
+	depends on IPV6
+
+	help
+	  Homa is a network transport protocol for communication within
+	  a datacenter. It provides significantly lower latency than TCP,
+	  particularly for workloads containing a mixture of large and small
+	  messages operating at high network utilization. For more information
+	  see the homa(7) man page or checkout the Homa Wiki at
+	  https://homa-transport.atlassian.net/wiki/spaces/HOMA/overview.
+
+	  If unsure, say N.
diff --git a/net/homa/Makefile b/net/homa/Makefile
new file mode 100644
index 000000000000..3eb192a6ffa6
--- /dev/null
+++ b/net/homa/Makefile
@@ -0,0 +1,14 @@ 
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Makefile for the Linux implementation of the Homa transport protocol.
+
+obj-$(CONFIG_HOMA) := homa.o
+homa-y:=        homa_incoming.o \
+		homa_outgoing.o \
+		homa_peer.o \
+		homa_pool.o \
+		homa_plumbing.o \
+		homa_rpc.o \
+		homa_sock.o \
+		homa_timer.o \
+		homa_utils.o