Re: [PATCH 3/4] s390/mm: Add __context_unsafe() attribute to gmap helper functions

Claudio Imbrenda <[email protected]>
Newsgroups org.kernel.vger.linux-s390,org.kernel.vger.linux-kernel
Organization IBM
Message-ID <20260804123014.1f128334@p-imbrenda>
On Mon,  3 Aug 2026 19:21:43 +0200
Heiko Carstens <[email protected]> wrote:

> Disable context analysis for various gmap helper functions to get rid
> of a few warnings:
> 
> arch/s390/mm/gmap_helpers.c:80:1: warning: spinlock 'ptl' is not held on every path through here
> arch/s390/mm/gmap_helpers.c:116:2: warning: releasing spinlock 'ptl' that was not held
> arch/s390/mm/gmap_helpers.c:186:2: warning: releasing spinlock 'ptl' that was not held
> 
> Use __context_unsafe() to give a short comment why for function context
> analysis is disabled.
> 
> try_get_locked_pte() is disabled since it may return a nonull value
> regardless if it returns with a lock held or not.
> 
> This cannot be reflected with the context analysis attributes. It is
> however possible to workaround this e.g. by adding a another `contended`
> function parameter, however this would lead to the next problem:
> pte_unmap_unlock() is a macro and therefore doesn't come with the
> required context analysis attribute to address this.
> 
> For that reason also disable context analysis for
> gmap_helper_zap_one_page() and gmap_helper_try_set_pte_unused()
> until this has been addressed.
> 
> Signed-off-by: Heiko Carstens <[email protected]>

Acked-by: Claudio Imbrenda <[email protected]>

> ---
>  arch/s390/mm/gmap_helpers.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/arch/s390/mm/gmap_helpers.c b/arch/s390/mm/gmap_helpers.c
> index 4bf7c9012feb..f910c9584560 100644
> --- a/arch/s390/mm/gmap_helpers.c
> +++ b/arch/s390/mm/gmap_helpers.c
> @@ -40,6 +40,7 @@
>   *   and locked.
>   */
>  pte_t *try_get_locked_pte(struct mm_struct *mm, unsigned long vmaddr, spinlock_t **ptl)
> +__context_unsafe(/* Returns nonnull if lock taken or not taken */)
>  {
>  	pmd_t *pmdp, pmd, pmdval;
>  	pud_t *pudp, pud;
> @@ -90,6 +91,7 @@ EXPORT_SYMBOL_GPL(try_get_locked_pte);
>   * Context: needs to be called while holding the mmap lock.
>   */
>  void gmap_helper_zap_one_page(struct mm_struct *mm, unsigned long vmaddr)
> +__context_unsafe(/* pte_unmap_unlock() not instrumented */)
>  {
>  	struct vm_area_struct *vma;
>  	spinlock_t *ptl;	/* Lock for the host (userspace) page table */
> @@ -161,6 +163,7 @@ EXPORT_SYMBOL_GPL(gmap_helper_discard);
>   *          disabled.
>   */
>  void gmap_helper_try_set_pte_unused(struct mm_struct *mm, unsigned long vmaddr)
> +__context_unsafe(/* pte_unmap_unlock() not instrumented */)
>  {
>  	spinlock_t *ptl;	/* Lock for the host (userspace) page table */
>  	pte_t *ptep;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.