All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: John Stultz <jstultz@google.com>, LKML <linux-kernel@vger.kernel.org>
Cc: oe-kbuild-all@lists.linux.dev, John Stultz <jstultz@google.com>,
	Joel Fernandes <joelaf@google.com>,
	Qais Yousef <qyousef@google.com>, Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Juri Lelli <juri.lelli@redhat.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Valentin Schneider <vschneid@redhat.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Ben Segall <bsegall@google.com>,
	Zimuzo Ezeozue <zezeozue@google.com>,
	Youssef Esmat <youssefesmat@google.com>,
	Mel Gorman <mgorman@suse.de>,
	Daniel Bristot de Oliveira <bristot@redhat.com>,
	Will Deacon <will@kernel.org>, Waiman Long <longman@redhat.com>,
	Boqun Feng <boqun.feng@gmail.com>,
	"Paul E . McKenney" <paulmck@kernel.org>,
	kernel-team@android.com
Subject: Re: [PATCH v6 14/20] sched: Add a very simple proxy() function
Date: Sat, 11 Nov 2023 21:32:49 +0800	[thread overview]
Message-ID: <202311112119.WREdJHjx-lkp@intel.com> (raw)
In-Reply-To: <20231106193524.866104-15-jstultz@google.com>

Hi John,

kernel test robot noticed the following build warnings:

[auto build test WARNING on tip/locking/core]
[also build test WARNING on v6.6]
[cannot apply to tip/sched/core tip/master linus/master tip/auto-latest next-20231110]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/John-Stultz/sched-Unify-runtime-accounting-across-classes/20231107-033946
base:   tip/locking/core
patch link:    https://lore.kernel.org/r/20231106193524.866104-15-jstultz%40google.com
patch subject: [PATCH v6 14/20] sched: Add a very simple proxy() function
config: x86_64-randconfig-121-20231111 (https://download.01.org/0day-ci/archive/20231111/202311112119.WREdJHjx-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231111/202311112119.WREdJHjx-lkp@intel.com/reproduce)

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 <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202311112119.WREdJHjx-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
   kernel/sched/core.c:756:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct task_struct *task @@     got struct task_struct [noderef] __rcu *curr @@
   kernel/sched/core.c:756:31: sparse:     expected struct task_struct *task
   kernel/sched/core.c:756:31: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/core.c:757:25: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct task_struct *task @@     got struct task_struct [noderef] __rcu *curr @@
   kernel/sched/core.c:757:25: sparse:     expected struct task_struct *task
   kernel/sched/core.c:757:25: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/core.c:1074:38: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct task_struct *curr @@     got struct task_struct [noderef] __rcu *curr @@
   kernel/sched/core.c:1074:38: sparse:     expected struct task_struct *curr
   kernel/sched/core.c:1074:38: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/core.c:2254:36: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct task_struct *curr @@     got struct task_struct [noderef] __rcu *curr @@
   kernel/sched/core.c:2254:36: sparse:     expected struct task_struct *curr
   kernel/sched/core.c:2254:36: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/core.c:2265:64: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct task_struct *tsk @@     got struct task_struct [noderef] __rcu *curr @@
   kernel/sched/core.c:2265:64: sparse:     expected struct task_struct *tsk
   kernel/sched/core.c:2265:64: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/core.c:5687:14: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct task_struct *curr @@     got struct task_struct [noderef] __rcu *curr @@
   kernel/sched/core.c:5687:14: sparse:     expected struct task_struct *curr
   kernel/sched/core.c:5687:14: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/core.c:6732:14: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct task_struct *prev @@     got struct task_struct [noderef] __rcu *curr @@
   kernel/sched/core.c:6732:14: sparse:     expected struct task_struct *prev
   kernel/sched/core.c:6732:14: sparse:     got struct task_struct [noderef] __rcu *curr
>> kernel/sched/core.c:6778:35: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct task_struct *prev @@     got struct task_struct [noderef] __rcu *curr @@
   kernel/sched/core.c:6778:35: sparse:     expected struct task_struct *prev
   kernel/sched/core.c:6778:35: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/core.c:7281:17: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/core.c:7281:17: sparse:    struct task_struct *
   kernel/sched/core.c:7281:17: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/core.c:7497:22: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/core.c:7497:22: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/core.c:7497:22: sparse:    struct task_struct *
   kernel/sched/core.c:11696:25: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct task_struct *p @@     got struct task_struct [noderef] __rcu *curr @@
   kernel/sched/core.c:11696:25: sparse:     expected struct task_struct *p
   kernel/sched/core.c:11696:25: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/core.c:582:6: sparse: sparse: context imbalance in 'raw_spin_rq_lock_nested' - wrong count at exit
   kernel/sched/core.c:607:6: sparse: sparse: context imbalance in 'raw_spin_rq_trylock' - wrong count at exit
   kernel/sched/core.c:631:6: sparse: sparse: context imbalance in 'raw_spin_rq_unlock' - unexpected unlock
   kernel/sched/core.c:669:36: sparse: sparse: context imbalance in '__task_rq_lock' - wrong count at exit
   kernel/sched/core.c:710:36: sparse: sparse: context imbalance in 'task_rq_lock' - wrong count at exit
   kernel/sched/core.c: note: in included file:
   kernel/sched/sched.h:2155:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2155:25: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2155:25: sparse:    struct task_struct *
   kernel/sched/sched.h:2155:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2155:25: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2155:25: sparse:    struct task_struct *
   kernel/sched/sched.h:2155:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2155:25: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2155:25: sparse:    struct task_struct *
   kernel/sched/sched.h:2166:32: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2166:32: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2166:32: sparse:    struct task_struct *
   kernel/sched/sched.h:2344:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2344:9: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2344:9: sparse:    struct task_struct *
   kernel/sched/sched.h:2344:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2344:9: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2344:9: sparse:    struct task_struct *
   kernel/sched/sched.h:2166:32: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2166:32: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2166:32: sparse:    struct task_struct *
   kernel/sched/sched.h:2344:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2344:9: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2344:9: sparse:    struct task_struct *
   kernel/sched/sched.h:2166:32: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2166:32: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2166:32: sparse:    struct task_struct *
   kernel/sched/sched.h:2344:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2344:9: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2344:9: sparse:    struct task_struct *
   kernel/sched/sched.h:2166:32: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2166:32: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2166:32: sparse:    struct task_struct *
   kernel/sched/sched.h:2344:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2344:9: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2344:9: sparse:    struct task_struct *
   kernel/sched/sched.h:2155:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2155:25: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2155:25: sparse:    struct task_struct *
   kernel/sched/sched.h:2166:32: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2166:32: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2166:32: sparse:    struct task_struct *
   kernel/sched/sched.h:2344:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2344:9: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2344:9: sparse:    struct task_struct *

vim +6778 kernel/sched/core.c

  6681	
  6682	/*
  6683	 * __schedule() is the main scheduler function.
  6684	 *
  6685	 * The main means of driving the scheduler and thus entering this function are:
  6686	 *
  6687	 *   1. Explicit blocking: mutex, semaphore, waitqueue, etc.
  6688	 *
  6689	 *   2. TIF_NEED_RESCHED flag is checked on interrupt and userspace return
  6690	 *      paths. For example, see arch/x86/entry_64.S.
  6691	 *
  6692	 *      To drive preemption between tasks, the scheduler sets the flag in timer
  6693	 *      interrupt handler scheduler_tick().
  6694	 *
  6695	 *   3. Wakeups don't really cause entry into schedule(). They add a
  6696	 *      task to the run-queue and that's it.
  6697	 *
  6698	 *      Now, if the new task added to the run-queue preempts the current
  6699	 *      task, then the wakeup sets TIF_NEED_RESCHED and schedule() gets
  6700	 *      called on the nearest possible occasion:
  6701	 *
  6702	 *       - If the kernel is preemptible (CONFIG_PREEMPTION=y):
  6703	 *
  6704	 *         - in syscall or exception context, at the next outmost
  6705	 *           preempt_enable(). (this might be as soon as the wake_up()'s
  6706	 *           spin_unlock()!)
  6707	 *
  6708	 *         - in IRQ context, return from interrupt-handler to
  6709	 *           preemptible context
  6710	 *
  6711	 *       - If the kernel is not preemptible (CONFIG_PREEMPTION is not set)
  6712	 *         then at the next:
  6713	 *
  6714	 *          - cond_resched() call
  6715	 *          - explicit schedule() call
  6716	 *          - return from syscall or exception to user-space
  6717	 *          - return from interrupt-handler to user-space
  6718	 *
  6719	 * WARNING: must be called with preemption disabled!
  6720	 */
  6721	static void __sched notrace __schedule(unsigned int sched_mode)
  6722	{
  6723		struct task_struct *prev, *next;
  6724		unsigned long *switch_count;
  6725		unsigned long prev_state;
  6726		struct rq_flags rf;
  6727		struct rq *rq;
  6728		int cpu;
  6729	
  6730		cpu = smp_processor_id();
  6731		rq = cpu_rq(cpu);
  6732		prev = rq->curr;
  6733	
  6734		schedule_debug(prev, !!sched_mode);
  6735	
  6736		if (sched_feat(HRTICK) || sched_feat(HRTICK_DL))
  6737			hrtick_clear(rq);
  6738	
  6739		local_irq_disable();
  6740		rcu_note_context_switch(!!sched_mode);
  6741	
  6742		/*
  6743		 * Make sure that signal_pending_state()->signal_pending() below
  6744		 * can't be reordered with __set_current_state(TASK_INTERRUPTIBLE)
  6745		 * done by the caller to avoid the race with signal_wake_up():
  6746		 *
  6747		 * __set_current_state(@state)		signal_wake_up()
  6748		 * schedule()				  set_tsk_thread_flag(p, TIF_SIGPENDING)
  6749		 *					  wake_up_state(p, state)
  6750		 *   LOCK rq->lock			    LOCK p->pi_state
  6751		 *   smp_mb__after_spinlock()		    smp_mb__after_spinlock()
  6752		 *     if (signal_pending_state())	    if (p->state & @state)
  6753		 *
  6754		 * Also, the membarrier system call requires a full memory barrier
  6755		 * after coming from user-space, before storing to rq->curr.
  6756		 */
  6757		rq_lock(rq, &rf);
  6758		smp_mb__after_spinlock();
  6759	
  6760		/* Promote REQ to ACT */
  6761		rq->clock_update_flags <<= 1;
  6762		update_rq_clock(rq);
  6763	
  6764		switch_count = &prev->nivcsw;
  6765	
  6766		/*
  6767		 * We must load prev->state once (task_struct::state is volatile), such
  6768		 * that we form a control dependency vs deactivate_task() below.
  6769		 */
  6770		prev_state = READ_ONCE(prev->__state);
  6771		if (!(sched_mode & SM_MASK_PREEMPT) && prev_state) {
  6772			try_to_deactivate_task(rq, prev, prev_state,
  6773					       !task_is_blocked(prev));
  6774			switch_count = &prev->nvcsw;
  6775		}
  6776	
  6777	pick_again:
> 6778		next = pick_next_task(rq, rq_selected(rq), &rf);
  6779		rq_set_selected(rq, next);
  6780		if (unlikely(task_is_blocked(next))) {
  6781			next = proxy(rq, next, &rf);
  6782			if (!next) {
  6783				rq_unpin_lock(rq, &rf);
  6784				__balance_callbacks(rq);
  6785				rq_repin_lock(rq, &rf);
  6786				goto pick_again;
  6787			}
  6788		}
  6789	
  6790		clear_tsk_need_resched(prev);
  6791		clear_preempt_need_resched();
  6792	#ifdef CONFIG_SCHED_DEBUG
  6793		rq->last_seen_need_resched_ns = 0;
  6794	#endif
  6795	
  6796		if (likely(prev != next)) {
  6797			rq->nr_switches++;
  6798			/*
  6799			 * RCU users of rcu_dereference(rq->curr) may not see
  6800			 * changes to task_struct made by pick_next_task().
  6801			 */
  6802			RCU_INIT_POINTER(rq->curr, next);
  6803			/*
  6804			 * The membarrier system call requires each architecture
  6805			 * to have a full memory barrier after updating
  6806			 * rq->curr, before returning to user-space.
  6807			 *
  6808			 * Here are the schemes providing that barrier on the
  6809			 * various architectures:
  6810			 * - mm ? switch_mm() : mmdrop() for x86, s390, sparc, PowerPC.
  6811			 *   switch_mm() rely on membarrier_arch_switch_mm() on PowerPC.
  6812			 * - finish_lock_switch() for weakly-ordered
  6813			 *   architectures where spin_unlock is a full barrier,
  6814			 * - switch_to() for arm64 (weakly-ordered, spin_unlock
  6815			 *   is a RELEASE barrier),
  6816			 */
  6817			++*switch_count;
  6818	
  6819			migrate_disable_switch(rq, prev);
  6820			psi_sched_switch(prev, next, !task_on_rq_queued(prev));
  6821	
  6822			trace_sched_switch(sched_mode & SM_MASK_PREEMPT, prev, next, prev_state);
  6823	
  6824			/* Also unlocks the rq: */
  6825			rq = context_switch(rq, prev, next, &rf);
  6826		} else {
  6827			rq->clock_update_flags &= ~(RQCF_ACT_SKIP|RQCF_REQ_SKIP);
  6828	
  6829			rq_unpin_lock(rq, &rf);
  6830			__balance_callbacks(rq);
  6831			raw_spin_rq_unlock_irq(rq);
  6832		}
  6833	}
  6834	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

  reply	other threads:[~2023-11-11 13:33 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-06 19:34 [PATCH v6 00/20] Proxy Execution: A generalized form of Priority Inheritance v6 John Stultz
2023-11-06 19:34 ` [PATCH v6 01/20] sched: Unify runtime accounting across classes John Stultz
2023-12-17 16:19   ` Qais Yousef
2023-12-18 20:23     ` John Stultz
2023-12-28 16:21       ` Qais Yousef
2023-11-06 19:34 ` [PATCH v6 02/20] locking/mutex: Removes wakeups from under mutex::wait_lock John Stultz
2023-11-06 19:34 ` [PATCH v6 03/20] locking/mutex: make mutex::wait_lock irq safe John Stultz
2023-11-06 19:34 ` [PATCH v6 04/20] locking/mutex: Expose __mutex_owner() John Stultz
2023-11-06 19:34 ` [PATCH v6 05/20] locking/mutex: Rework task_struct::blocked_on John Stultz
2023-11-06 19:34 ` [PATCH v6 06/20] locking/mutex: Add task_struct::blocked_lock to serialize changes to the blocked_on state John Stultz
2023-11-06 19:34 ` [PATCH v6 07/20] locking/mutex: Add p->blocked_on wrappers for correctness checks John Stultz
2023-11-06 19:34 ` [PATCH v6 08/20] sched: Add CONFIG_PROXY_EXEC & boot argument to enable/disable John Stultz
2023-11-06 19:34 ` [PATCH v6 09/20] locking/mutex: Split blocked_on logic into two states (blocked_on and blocked_on_waking) John Stultz
2023-11-06 19:34 ` [PATCH v6 10/20] locking/mutex: Switch to mutex handoffs for CONFIG_PROXY_EXEC John Stultz
2023-11-06 19:34 ` [PATCH v6 11/20] sched: Split scheduler execution context John Stultz
2023-11-11  9:34   ` kernel test robot
2023-11-11 10:25   ` kernel test robot
2023-11-06 19:34 ` [PATCH v6 12/20] sched: Fix runtime accounting w/ split exec & sched contexts John Stultz
2023-11-11 11:26   ` kernel test robot
2023-11-06 19:34 ` [PATCH v6 13/20] sched: Split out __sched() deactivate task logic into a helper John Stultz
2023-11-06 19:34 ` [PATCH v6 14/20] sched: Add a very simple proxy() function John Stultz
2023-11-11 13:32   ` kernel test robot [this message]
2023-11-06 19:34 ` [PATCH v6 15/20] sched: Add proxy deactivate helper John Stultz
2023-11-08  2:51   ` kernel test robot
2023-11-18  0:27     ` John Stultz
2023-11-06 19:34 ` [PATCH v6 16/20] sched: Fix proxy/current (push,pull)ability John Stultz
2023-11-06 19:35 ` [PATCH v6 17/20] sched: Start blocked_on chain processing in proxy() John Stultz
2023-11-06 19:35 ` [PATCH v6 18/20] sched: Handle blocked-waiter migration (and return migration) John Stultz
2023-11-09  5:31   ` Xuewen Yan
2023-11-09  6:08     ` John Stultz
2023-11-09  6:38       ` Xuewen Yan
2023-11-10  3:45         ` John Stultz
2023-11-06 19:35 ` [PATCH v6 19/20] sched: Add blocked_donor link to task for smarter mutex handoffs John Stultz
2023-11-06 19:35 ` [PATCH v6 20/20] sched: Add deactivated (sleeping) owner handling to proxy() John Stultz
     [not found] ` <20231108111458.1368-1-hdanton@sina.com>
2023-11-08 22:13   ` [PATCH v6 00/20] Proxy Execution: A generalized form of Priority Inheritance v6 John Stultz
2023-11-10  9:07 ` Xuewen Yan
2023-12-13  6:37 ` K Prateek Nayak
2023-12-13 16:20   ` Metin Kaya
2023-12-13 19:11   ` John Stultz
2023-12-14  5:15     ` K Prateek Nayak
2023-12-14  1:00   ` John Stultz
2023-12-14  1:03     ` John Stultz
2023-12-17  3:07 ` Qais Yousef
2023-12-18 23:38   ` John Stultz
2023-12-28 16:45     ` Qais Yousef

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202311112119.WREdJHjx-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=boqun.feng@gmail.com \
    --cc=bristot@redhat.com \
    --cc=bsegall@google.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=joelaf@google.com \
    --cc=jstultz@google.com \
    --cc=juri.lelli@redhat.com \
    --cc=kernel-team@android.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=longman@redhat.com \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=qyousef@google.com \
    --cc=rostedt@goodmis.org \
    --cc=vincent.guittot@linaro.org \
    --cc=vschneid@redhat.com \
    --cc=will@kernel.org \
    --cc=youssefesmat@google.com \
    --cc=zezeozue@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.