All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Russell King (Oracle)" <linux@armlinux.org.uk>
To: Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org
Subject: Re: [arm:ktext 16/19] arch/arm64/mm/ktext.c:96:17: error: implicit declaration of function 'clean_dcache_range_nopatch'
Date: Fri, 12 Aug 2022 12:46:55 +0100	[thread overview]
Message-ID: <YvY9r7YJoy7mTPAV@shell.armlinux.org.uk> (raw)
In-Reply-To: <202208120434.0ibxs7Y5-lkp@intel.com>

ARM64 folk,

What do you think would be the best way to fix the issue with
clean_dcache_range_nopatch() in this patch set? I see two possible
solutions to it:

1) duplicate clean_dcache_range_nopatch() in arch/arm64/mm/ktext.c
2) make clean_dcache_range_nopatch() globally visible so ktext.c
   can call it.

Neither of these feels like a great solution.

I've thought about moving the code into arch/arm64/kernel/alternative.c
but that means making other stuff globally visible instead. So it seems
to be a case of what is the lesser of all the evils.

The patch can be viewed at:
http://git.armlinux.org.uk/cgit/linux-arm.git/commit/?h=ktext&id=b8557d9117093ebe17320d36dadd47fc742820c9

Thanks.

On Fri, Aug 12, 2022 at 04:50:31AM +0800, kernel test robot wrote:
> Hi Russell,
> 
> First bad commit (maybe != root cause):
> 
> tree:   git://git.armlinux.org.uk/~rmk/linux-arm.git ktext
> head:   6f969d4aee6bbafad356a7bae6e37d9e2dce9e08
> commit: 5e25ed1e1f5ddef3d1be949922f9ea10c2e45b24 [16/19] arm64: text replication: add Kconfig
> config: arm64-allyesconfig (https://download.01.org/0day-ci/archive/20220812/202208120434.0ibxs7Y5-lkp@intel.com/config)
> compiler: aarch64-linux-gcc (GCC) 12.1.0
> reproduce (this is a W=1 build):
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         git remote add arm git://git.armlinux.org.uk/~rmk/linux-arm.git
>         git fetch --no-tags arm ktext
>         git checkout 5e25ed1e1f5ddef3d1be949922f9ea10c2e45b24
>         # save the config file
>         mkdir build_dir && cp config build_dir/.config
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash arch/arm64/
> 
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@intel.com>
> 
> All errors (new ones prefixed by >>):
> 
>    arch/arm64/mm/ktext.c: In function 'ktext_replication_patch_alternative':
> >> arch/arm64/mm/ktext.c:96:17: error: implicit declaration of function 'clean_dcache_range_nopatch' [-Werror=implicit-function-declaration]
>       96 |                 clean_dcache_range_nopatch((u64)p, (u64)p + size);
>          |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
>    arch/arm64/mm/ktext.c: In function 'ktext_replication_init':
> >> arch/arm64/mm/ktext.c:145:37: error: implicit declaration of function 'memblock_alloc_node'; did you mean 'kmem_cache_alloc_node'? [-Werror=implicit-function-declaration]
>      145 |                 kernel_texts[nid] = memblock_alloc_node(size, PAGE_SIZE, nid);
>          |                                     ^~~~~~~~~~~~~~~~~~~
>          |                                     kmem_cache_alloc_node
>    arch/arm64/mm/ktext.c:145:35: warning: assignment to 'void *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
>      145 |                 kernel_texts[nid] = memblock_alloc_node(size, PAGE_SIZE, nid);
>          |                                   ^
>    arch/arm64/mm/ktext.c:151:31: warning: assignment to 'struct pgtables *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
>      151 |                 pgtables[nid] = memblock_alloc_node(sizeof(*pgtables[0]),
>          |                               ^
>    cc1: some warnings being treated as errors
> 
> 
> vim +/clean_dcache_range_nopatch +96 arch/arm64/mm/ktext.c
> 
> b8557d9117093e Russell King (Oracle  2022-05-24   73) 
> b8557d9117093e Russell King (Oracle  2022-05-24   74) /* Copy the patched alternative from the node0 image to the other
> b8557d9117093e Russell King (Oracle  2022-05-24   75)  * modes. src is the node 0 linear-mapping address.
> b8557d9117093e Russell King (Oracle  2022-05-24   76)  */
> b8557d9117093e Russell King (Oracle  2022-05-24   77) void ktext_replication_patch_alternative(__le32 *src, int nr_inst)
> b8557d9117093e Russell King (Oracle  2022-05-24   78) {
> b8557d9117093e Russell King (Oracle  2022-05-24   79) 	unsigned long offset;
> b8557d9117093e Russell King (Oracle  2022-05-24   80) 	size_t size;
> b8557d9117093e Russell King (Oracle  2022-05-24   81) 	int nid;
> b8557d9117093e Russell King (Oracle  2022-05-24   82) 	__le32 *p;
> b8557d9117093e Russell King (Oracle  2022-05-24   83) 
> b8557d9117093e Russell King (Oracle  2022-05-24   84) 	offset = (unsigned long)src - (unsigned long)lm_alias(_stext);
> b8557d9117093e Russell King (Oracle  2022-05-24   85) 	if (WARN_ON_ONCE(offset >= _etext - _stext))
> b8557d9117093e Russell King (Oracle  2022-05-24   86) 		return;
> b8557d9117093e Russell King (Oracle  2022-05-24   87) 
> b8557d9117093e Russell King (Oracle  2022-05-24   88) 	size = AARCH64_INSN_SIZE * nr_inst;
> b8557d9117093e Russell King (Oracle  2022-05-24   89) 
> b8557d9117093e Russell King (Oracle  2022-05-24   90) 	for_each_node(nid) {
> b8557d9117093e Russell King (Oracle  2022-05-24   91) 		if (!kernel_texts[nid])
> b8557d9117093e Russell King (Oracle  2022-05-24   92) 			continue;
> b8557d9117093e Russell King (Oracle  2022-05-24   93) 
> b8557d9117093e Russell King (Oracle  2022-05-24   94) 		p = kernel_texts[nid] + offset;
> b8557d9117093e Russell King (Oracle  2022-05-24   95) 		memcpy(p, src, size);
> b8557d9117093e Russell King (Oracle  2022-05-24  @96) 		clean_dcache_range_nopatch((u64)p, (u64)p + size);
> b8557d9117093e Russell King (Oracle  2022-05-24   97) 	}
> b8557d9117093e Russell King (Oracle  2022-05-24   98) }
> b8557d9117093e Russell King (Oracle  2022-05-24   99) 
> c328a296007681 Russell King (Oracle  2022-07-07  100) static bool ktext_enabled = true;
> c328a296007681 Russell King (Oracle  2022-07-07  101) 
> c328a296007681 Russell King (Oracle  2022-07-07  102) static int __init parse_ktext(char *str)
> c328a296007681 Russell King (Oracle  2022-07-07  103) {
> c328a296007681 Russell King (Oracle  2022-07-07  104) 	bool enabled;
> c328a296007681 Russell King (Oracle  2022-07-07  105) 	int ret = strtobool(str, &enabled);
> c328a296007681 Russell King (Oracle  2022-07-07  106) 
> c328a296007681 Russell King (Oracle  2022-07-07  107) 	if (ret)
> c328a296007681 Russell King (Oracle  2022-07-07  108) 		return ret;
> c328a296007681 Russell King (Oracle  2022-07-07  109) 
> c328a296007681 Russell King (Oracle  2022-07-07  110) 	ktext_enabled = enabled;
> c328a296007681 Russell King (Oracle  2022-07-07  111) 	return 0;
> c328a296007681 Russell King (Oracle  2022-07-07  112) }
> c328a296007681 Russell King (Oracle  2022-07-07  113) early_param("ktext", parse_ktext);
> c328a296007681 Russell King (Oracle  2022-07-07  114) 
> 06e9efea0a2391 Russell King (Oracle  2022-04-20  115) /* Allocate page tables and memory for the replicated kernel texts. */
> 4a17b67dc0c254 Russell King (Oracle  2022-04-21  116) void ktext_replication_init(void)
> 4a17b67dc0c254 Russell King (Oracle  2022-04-21  117) {
> c5ce21bcc37dcf Russell King (Oracle  2022-06-17  118) 	size_t size = __end_rodata - _stext;
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  119) 	int kidx = pgd_index((phys_addr_t)KERNEL_START);
> 62f0b42355e0b5 Russell King (Oracle  2022-05-16  120) 	int nid;
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  121) 
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  122) 	/*
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  123) 	 * If we've messed up and the kernel shares a L0 entry with the
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  124) 	 * module or vmalloc area, then don't even attempt to use text
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  125) 	 * replication.
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  126) 	 */
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  127) 	if (pgd_index(MODULES_VADDR) == kidx) {
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  128) 		pr_warn("Kernel is located in the same L0 index as modules - text replication disabled\n");
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  129) 		return;
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  130) 	}
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  131) 	if (pgd_index(VMALLOC_START) == kidx) {
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  132) 		pr_warn("Kernel is located in the same L0 index as vmalloc - text replication disabled\n");
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  133) 		return;
> cc8a46d8fdca7d Russell King (Oracle  2022-04-21  134) 	}
> 62f0b42355e0b5 Russell King (Oracle  2022-05-16  135) 
> c328a296007681 Russell King (Oracle  2022-07-07  136) 	if (!ktext_enabled)
> c328a296007681 Russell King (Oracle  2022-07-07  137) 		return;
> c328a296007681 Russell King (Oracle  2022-07-07  138) 
> 62f0b42355e0b5 Russell King (Oracle  2022-05-16  139) 	for_each_node(nid) {
> 62f0b42355e0b5 Russell King (Oracle  2022-05-16  140) 		/* Nothing to do for node 0 */
> 62f0b42355e0b5 Russell King (Oracle  2022-05-16  141) 		if (!nid)
> 62f0b42355e0b5 Russell King (Oracle  2022-05-16  142) 			continue;
> 62f0b42355e0b5 Russell King (Oracle  2022-05-16  143) 
> 62f0b42355e0b5 Russell King (Oracle  2022-05-16  144) 		/* Allocate and copy initial kernel text for this node */
> 62f0b42355e0b5 Russell King (Oracle  2022-05-16 @145) 		kernel_texts[nid] = memblock_alloc_node(size, PAGE_SIZE, nid);
> 62f0b42355e0b5 Russell King (Oracle  2022-05-16  146) 		memcpy(kernel_texts[nid], _stext, size);
> 62f0b42355e0b5 Russell King (Oracle  2022-05-16  147) 		caches_clean_inval_pou((u64)kernel_texts[nid],
> 62f0b42355e0b5 Russell King (Oracle  2022-05-16  148) 				       (u64)kernel_texts[nid] + size);
> 06e9efea0a2391 Russell King (Oracle  2022-04-20  149) 
> 06e9efea0a2391 Russell King (Oracle  2022-04-20  150) 		/* Allocate the pagetables for this node */
> 06e9efea0a2391 Russell King (Oracle  2022-04-20  151) 		pgtables[nid] = memblock_alloc_node(sizeof(*pgtables[0]),
> 06e9efea0a2391 Russell King (Oracle  2022-04-20  152) 						    PGD_SIZE, nid);
> 06e9efea0a2391 Russell King (Oracle  2022-04-20  153) 
> 06e9efea0a2391 Russell King (Oracle  2022-04-20  154) 		/* Copy initial swapper page directory */
> 06e9efea0a2391 Russell King (Oracle  2022-04-20  155) 		memcpy(pgtables[nid]->swapper_pg_dir, swapper_pg_dir, PGD_SIZE);
> 26904e19f00089 Russell King (Oracle  2022-05-16  156) 
> 26904e19f00089 Russell King (Oracle  2022-05-16  157) 		/* Clear the kernel mapping */
> 26904e19f00089 Russell King (Oracle  2022-05-16  158) 		memset(&pgtables[nid]->swapper_pg_dir[kidx], 0,
> 26904e19f00089 Russell King (Oracle  2022-05-16  159) 		       sizeof(pgtables[nid]->swapper_pg_dir[kidx]));
> 26904e19f00089 Russell King (Oracle  2022-05-16  160) 
> 26904e19f00089 Russell King (Oracle  2022-05-16  161) 		/* Create kernel mapping pointing at our local copy */
> 26904e19f00089 Russell King (Oracle  2022-05-16  162) 		create_kernel_nid_map(pgtables[nid]->swapper_pg_dir,
> 26904e19f00089 Russell King (Oracle  2022-05-16  163) 				      kernel_texts[nid]);
> 06e9efea0a2391 Russell King (Oracle  2022-04-20  164) 	}
> 06e9efea0a2391 Russell King (Oracle  2022-04-20  165) }
> 06e9efea0a2391 Russell King (Oracle  2022-04-20  166) 
> 
> :::::: The code at line 96 was first introduced by commit
> :::::: b8557d9117093ebe17320d36dadd47fc742820c9 arm64: text replication: add node text patching
> 
> :::::: TO: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> :::::: CC: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> 
> -- 
> 0-DAY CI Kernel Test Service
> https://01.org/lkp
> 

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2022-08-12 11:48 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-11 20:50 [arm:ktext 16/19] arch/arm64/mm/ktext.c:96:17: error: implicit declaration of function 'clean_dcache_range_nopatch' kernel test robot
2022-08-12 11:46 ` Russell King (Oracle) [this message]
2022-09-07 14:22   ` Catalin Marinas
2022-09-07 14:29     ` Russell King (Oracle)

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=YvY9r7YJoy7mTPAV@shell.armlinux.org.uk \
    --to=linux@armlinux.org.uk \
    --cc=catalin.marinas@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=will@kernel.org \
    /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.