Subject: Re: linux-next: manual merge of the bitmap tree with the random tree

From: Michael Ellerman <[email-masked]>
Date: Sat, 06 Aug 2022 15:40:15 +1000

Hi Mark,

Thanks for doing linux-next in sfr's absence.

The merge resolution below is not quite right ...

[email-masked] writes:
> Hi all,
>
> Today's linux-next merge of the bitmap tree got a conflict in:
>
> arch/powerpc/include/asm/archrandom.h
>
> between commit:
>
>   d349ab99eec7a ("random: handle archrandom with multiple longs")
>
> from the random tree and commit:
>
>   3e731203153de ("powerpc: drop dependency on <asm/machdep.h> in archrandom.h")
>
> from the bitmap tree.
>
> I fixed it up (see below) and can carry the fix as necessary. This
> is now fixed as far as linux-next is concerned, but any non trivial
> conflicts should be mentioned to your upstream maintainer when your tree
> is submitted for merging.  You may also want to consider cooperating
> with the maintainer of the conflicting tree to minimise any particularly
> complex conflicts.
>
> diff --cc arch/powerpc/include/asm/archrandom.h
> index 564859e6a807c,21def59ef1a68..0000000000000
> --- a/arch/powerpc/include/asm/archrandom.h
> +++ b/arch/powerpc/include/asm/archrandom.h
> @@@ -2,22 -2,41 +2,17 @@@
>   #ifndef _ASM_POWERPC_ARCHRANDOM_H
>   #define _ASM_POWERPC_ARCHRANDOM_H
>   
>  -#ifdef CONFIG_ARCH_RANDOM
>  +#include <asm/machdep.h>
  
This include must be dropped.

>  -bool __must_check arch_get_random_seed_long(unsigned long *v);
>  -
>  -static inline bool __must_check arch_get_random_long(unsigned long *v)
>  +static inline size_t __must_check arch_get_random_longs(unsigned long *v, size_t max_longs)
>   {
>  -	return false;
>  +	return 0;
>   }
>   
> - static inline size_t __must_check arch_get_random_seed_longs(unsigned long *v, size_t max_longs)
>  -static inline bool __must_check arch_get_random_int(unsigned int *v)
> --{
> - 	if (max_longs && ppc_md.get_random_seed && ppc_md.get_random_seed(v))
> - 		return 1;
> - 	return 0;
>  -	return false;
>  -}
>  -
>  -
>  -static inline bool __must_check arch_get_random_seed_int(unsigned int *v)
>  -{
>  -	unsigned long val;
>  -	bool rc;
>  -
>  -	rc = arch_get_random_seed_long(&val);
>  -	if (rc)
>  -		*v = val;
>  -
>  -	return rc;
> --}
>  -#endif /* CONFIG_ARCH_RANDOM */
> ++size_t __must_check arch_get_random_seed_longs(unsigned long *v, size_t max_longs);
>   
>   #ifdef CONFIG_PPC_POWERNV
>  -int powernv_hwrng_present(void);
>  -int powernv_get_random_long(unsigned long *v);
>  -int powernv_get_random_real_mode(unsigned long *v);
>  -#else
>  -static inline int powernv_hwrng_present(void) { return 0; }
>  -static inline int powernv_get_random_real_mode(unsigned long *v) { return 0; }
>  +int pnv_get_random_long(unsigned long *v);
>   #endif
>   
>   #endif /* _ASM_POWERPC_ARCHRANDOM_H */
> diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
> index 3b1cf9ca4814b..951822145600e 100644
> --- a/arch/powerpc/kernel/setup-common.c
> +++ b/arch/powerpc/kernel/setup-common.c
> @@ -172,12 +172,12 @@ void (*pm_power_off)(void);
>  EXPORT_SYMBOL_GPL(pm_power_off);
>  
>  #ifdef CONFIG_ARCH_RANDOM

This ifdef must be dropped entirely, it was removed in Jason's tree.

> -bool __must_check arch_get_random_seed_long(unsigned long *v)
> +size_T __must_check arch_get_random_seed_longs(unsigned long *v, size_t max_longs)

Typo, should be size_t.

>  {
> -	if (ppc_md.get_random_seed)
> -		return ppc_md.get_random_seed(v);
> +	if (max_longs && ppc_md.get_random_seed && ppc_md.get_random_seed(v))
> +		return 1;
>  
> -	return false;
> +	return 0;
>  }
>  EXPORT_SYMBOL(arch_get_random_seed_long);

The export needs to be updated to "arch_get_random_seed_longs".

I've attached the end state of archrandom.h and the hunk in
setup-common.c below for reference.

cheers

==== arch/powerpc/kernel/setup-common.c ====
...

size_t __must_check arch_get_random_seed_longs(unsigned long *v, size_t max_longs)
{
	if (max_longs && ppc_md.get_random_seed && ppc_md.get_random_seed(v))
		return 1;

	return 0;
}
EXPORT_SYMBOL(arch_get_random_seed_longs);

...

==== arch/powerpc/include/asm/archrandom.h ====
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _ASM_POWERPC_ARCHRANDOM_H
#define _ASM_POWERPC_ARCHRANDOM_H

static inline size_t __must_check arch_get_random_longs(unsigned long *v, size_t max_longs)
{
	return 0;
}

size_t __must_check arch_get_random_seed_longs(unsigned long *v, size_t max_longs);

#ifdef CONFIG_PPC_POWERNV
int pnv_get_random_long(unsigned long *v);
#endif

#endif /* _ASM_POWERPC_ARCHRANDOM_H */