Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp2705064rwb; Fri, 11 Nov 2022 13:28:38 -0800 (PST) X-Google-Smtp-Source: AA0mqf5YvGKUEHurgrSWMYEFtqHpR1Cu9DnTxGwXVt4K/nKsul5wys9dz2YR6rffzSTN6aPqx1uY X-Received: by 2002:a17:903:26cd:b0:17f:7ed0:2367 with SMTP id jg13-20020a17090326cd00b0017f7ed02367mr4385949plb.31.1668202117982; Fri, 11 Nov 2022 13:28:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668202117; cv=none; d=google.com; s=arc-20160816; b=qvNBrZcbHWuk8tAYyYbufTSB/fXCjAhCKUTdEW87OzWW4VAdCzdgl2+9nVZ31Zkkew eXgDgy3jxTXouoxQoQas7jJWEFAs+NbyCnSbZXGlScuIgRsMp3AZHKAomb/GwAu4C5sZ atVEYW8EIpYhtfbEAmKt/Gsi8KoLsly9Y9FY12jqVC4yMyqWNxZljfH0OojuYam1KKyO Oc6JxsmTVgp0K84beDtolT76gA6eWKmtymijN7RoS7OTENbPEPT7D7Nx+y/3Ogzb0e0p 7YHJI2fSjyN2DZiuNESlpn17TgYm76jk6+N2+TqDpfhtKPyu2pbbCYHv+6OcxFUScMDN 9o0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature:dkim-filter; bh=EyB7xuj27UQuQU7CUd0Wp/ZT6CK+jN98wSu6cp14EDQ=; b=R3KmqXYWEXTR4tLDzJHJZUuDnmCpdCE9FGWimEBwJCOlpIn9JV1SwlxpwCDAtFzLhb xOu95A1IcUeVZCr3W4SE5MShqks5nXyouq/XYO2QmvaCdtSNQr209qFH3j2uOYiFdI4j Fat4dGBcTAup2aS9zdydLwar/xb8ck0Q5YmCjWK1ZRLAWEhw32LbvgcJFPyYrOffY2MK Mk8tvZ/NN0H9sZmRwXStoVmQEVxLTQDUyEHT+C0vJ7aS2e6YBInEt/2A7siMVZ3BM3SF mERcYxINTMH2taFNj6NvB86AdA8c6MnAaZeqSskaX8xTAIS/Nk8tzU7hfpEDDkZr0mWZ WoTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=F3hLupm9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u26-20020a63471a000000b0046f5a213b6bsi3257135pga.750.2022.11.11.13.28.27; Fri, 11 Nov 2022 13:28:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=F3hLupm9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234004AbiKKU7S (ORCPT + 90 others); Fri, 11 Nov 2022 15:59:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43108 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231300AbiKKU7O (ORCPT ); Fri, 11 Nov 2022 15:59:14 -0500 Received: from conssluserg-04.nifty.com (conssluserg-04.nifty.com [210.131.2.83]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 996AF7BE71 for ; Fri, 11 Nov 2022 12:59:13 -0800 (PST) Received: from mail-oa1-f45.google.com (mail-oa1-f45.google.com [209.85.160.45]) (authenticated) by conssluserg-04.nifty.com with ESMTP id 2ABKwveG014903 for ; Sat, 12 Nov 2022 05:58:58 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-04.nifty.com 2ABKwveG014903 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1668200338; bh=EyB7xuj27UQuQU7CUd0Wp/ZT6CK+jN98wSu6cp14EDQ=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=F3hLupm9fl6+RTjhQKIXcxV2isHW3mnsmw9s4vG1j9i6Sk1DVGG8w5tdWG572vW15 UQry74QlZJ/3tn95kl+OgR1nyiQ8iGj/cuzhvBhtCkURfecw7nbgVMEOuUJC8dUjVC 3WWeT9/IwYRF2ZSWaJuSE7vCUIS83WVVL3GxG1zE0b7W8d65ngDLqFtfNHLaDtuw97 dO/9luibo3xQtNmsc3h6NW6SEJlKw3qPUK6hzyP5a6pZCun7tE7OJEO8qCzl88qLXp G0o59m+WRLE0kTFy20b7n7dgdDqdyetV2ZGnY8A+eL9haux/pxPX6d6i7SWUDmuXP1 nXAQ34ZXCQ0PA== X-Nifty-SrcIP: [209.85.160.45] Received: by mail-oa1-f45.google.com with SMTP id 586e51a60fabf-13d9a3bb27aso6612178fac.11 for ; Fri, 11 Nov 2022 12:58:58 -0800 (PST) X-Gm-Message-State: ANoB5pnO6iQ7+W9fQ3gTva3DzYzAu9CrIuxqHLoqgd4mDLDeOfSbbO5t zFIyvii8QS8LedN0H3SaJmJYZaB0SqZWsJW3tbM= X-Received: by 2002:a05:6870:4b4a:b0:13b:5d72:d2c6 with SMTP id ls10-20020a0568704b4a00b0013b5d72d2c6mr1881372oab.287.1668200336889; Fri, 11 Nov 2022 12:58:56 -0800 (PST) MIME-Version: 1.0 References: <20220929020823.1373722-1-aik@ozlabs.ru> In-Reply-To: <20220929020823.1373722-1-aik@ozlabs.ru> From: Masahiro Yamada Date: Sat, 12 Nov 2022 05:58:20 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH kernel v3] zstd: Fixing mixed module-builtin objects To: Alexey Kardashevskiy Cc: linux-kernel@vger.kernel.org, Nick Terrell , Nick Desaulniers , Nathan Chancellor , Nicholas Piggin , kernel test robot Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-1.2 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_SOFTFAIL autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Sep 29, 2022 at 11:08 AM Alexey Kardashevskiy wrote: > > With CONFIG_ZSTD_COMPRESS=m and CONFIG_ZSTD_DECOMPRESS=y we end up in > a situation when files from lib/zstd/common/ are compiled once to be > linked later for ZSTD_DECOMPRESS (build-in) and ZSTD_COMPRESS (module) > even though CFLAGS are different for builtins and modules. > So far somehow this was not a problem but enabling LLVM LTO exposes > the problem as: > > ld.lld: error: linking module flags 'Code Model': IDs have conflicting values in 'lib/built-in.a(zstd_common.o at 5868)' and 'ld-temp.o' > > This particular conflict is caused by KBUILD_CFLAGS=-mcmodel=medium vs. > KBUILD_CFLAGS_MODULE=-mcmodel=large , modules use the large model on > POWERPC as explained at > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/powerpc/Makefile?h=v5.18-rc4#n127 > but the current use of common files is wrong anyway. BTW, how to reproduce this error? You referred to the arch/powerpc/Makefile, but ARCH=powerpc cannot enable Clang LTO. (powerpc does not select ARCH_SUPPORTS_LTO_CLANG). > This works around the issue by introducing a zstd_common module with > shared code. > > Cc: Masahiro Yamada > Signed-off-by: Alexey Kardashevskiy > [robot found a problem in v2] > Reported-by: kernel test robot > --- > Changes: > v3: > * added EXPORT_SYMBOL_GPL to compile with: > CONFIG_ZSTD_COMMON=m > CONFIG_ZSTD_COMPRESS=m > CONFIG_ZSTD_DECOMPRESS=m > Vast majority of cases have CONFIG_ZSTD_COMMON=y so this went unnoticed > --- > lib/zstd/Makefile | 18 ++++++++---------- > lib/zstd/common/entropy_common.c | 5 ++++- > lib/zstd/common/zstd_common.c | 10 ++++++++++ > lib/Kconfig | 8 ++++++-- > 4 files changed, 28 insertions(+), 13 deletions(-) > > diff --git a/lib/zstd/Makefile b/lib/zstd/Makefile > index fc45339fc3a3..440bd0007ae2 100644 > --- a/lib/zstd/Makefile > +++ b/lib/zstd/Makefile > @@ -10,14 +10,10 @@ > # ################################################################ > obj-$(CONFIG_ZSTD_COMPRESS) += zstd_compress.o > obj-$(CONFIG_ZSTD_DECOMPRESS) += zstd_decompress.o > +obj-$(CONFIG_ZSTD_COMMON) += zstd_common.o > > zstd_compress-y := \ > zstd_compress_module.o \ > - common/debug.o \ > - common/entropy_common.o \ > - common/error_private.o \ > - common/fse_decompress.o \ > - common/zstd_common.o \ > compress/fse_compress.o \ > compress/hist.o \ > compress/huf_compress.o \ > @@ -33,12 +29,14 @@ zstd_compress-y := \ > > zstd_decompress-y := \ > zstd_decompress_module.o \ > - common/debug.o \ > - common/entropy_common.o \ > - common/error_private.o \ > - common/fse_decompress.o \ > - common/zstd_common.o \ > decompress/huf_decompress.o \ > decompress/zstd_ddict.o \ > decompress/zstd_decompress.o \ > decompress/zstd_decompress_block.o \ > + > +zstd_common-y := \ > + common/debug.o \ > + common/entropy_common.o \ > + common/error_private.o \ > + common/fse_decompress.o \ > + common/zstd_common.o \ > diff --git a/lib/zstd/common/entropy_common.c b/lib/zstd/common/entropy_common.c > index 53b47a2b52ff..a311808c0d56 100644 > --- a/lib/zstd/common/entropy_common.c > +++ b/lib/zstd/common/entropy_common.c > @@ -15,6 +15,7 @@ > /* ************************************* > * Dependencies > ***************************************/ > +#include > #include "mem.h" > #include "error_private.h" /* ERR_*, ERROR */ > #define FSE_STATIC_LINKING_ONLY /* FSE_MIN_TABLELOG */ > @@ -239,7 +240,7 @@ size_t FSE_readNCount( > { > return FSE_readNCount_bmi2(normalizedCounter, maxSVPtr, tableLogPtr, headerBuffer, hbSize, /* bmi2 */ 0); > } > - > +EXPORT_SYMBOL_GPL(FSE_readNCount); > > /*! HUF_readStats() : > Read compact Huffman tree, saved by HUF_writeCTable(). > @@ -255,6 +256,7 @@ size_t HUF_readStats(BYTE* huffWeight, size_t hwSize, U32* rankStats, > U32 wksp[HUF_READ_STATS_WORKSPACE_SIZE_U32]; > return HUF_readStats_wksp(huffWeight, hwSize, rankStats, nbSymbolsPtr, tableLogPtr, src, srcSize, wksp, sizeof(wksp), /* bmi2 */ 0); > } > +EXPORT_SYMBOL_GPL(HUF_readStats); > > FORCE_INLINE_TEMPLATE size_t > HUF_readStats_body(BYTE* huffWeight, size_t hwSize, U32* rankStats, > @@ -355,3 +357,4 @@ size_t HUF_readStats_wksp(BYTE* huffWeight, size_t hwSize, U32* rankStats, > (void)bmi2; > return HUF_readStats_body_default(huffWeight, hwSize, rankStats, nbSymbolsPtr, tableLogPtr, src, srcSize, workSpace, wkspSize); > } > +EXPORT_SYMBOL_GPL(HUF_readStats_wksp); > diff --git a/lib/zstd/common/zstd_common.c b/lib/zstd/common/zstd_common.c > index 3d7e35b309b5..0f1f63be25d9 100644 > --- a/lib/zstd/common/zstd_common.c > +++ b/lib/zstd/common/zstd_common.c > @@ -13,6 +13,7 @@ > /*-************************************* > * Dependencies > ***************************************/ > +#include > #define ZSTD_DEPS_NEED_MALLOC > #include "zstd_deps.h" /* ZSTD_malloc, ZSTD_calloc, ZSTD_free, ZSTD_memset */ > #include "error_private.h" > @@ -35,14 +36,17 @@ const char* ZSTD_versionString(void) { return ZSTD_VERSION_STRING; } > * tells if a return value is an error code > * symbol is required for external callers */ > unsigned ZSTD_isError(size_t code) { return ERR_isError(code); } > +EXPORT_SYMBOL_GPL(ZSTD_isError); > > /*! ZSTD_getErrorName() : > * provides error code string from function result (useful for debugging) */ > const char* ZSTD_getErrorName(size_t code) { return ERR_getErrorName(code); } > +EXPORT_SYMBOL_GPL(ZSTD_getErrorName); > > /*! ZSTD_getError() : > * convert a `size_t` function result into a proper ZSTD_errorCode enum */ > ZSTD_ErrorCode ZSTD_getErrorCode(size_t code) { return ERR_getErrorCode(code); } > +EXPORT_SYMBOL_GPL(ZSTD_getErrorCode); > > /*! ZSTD_getErrorString() : > * provides error code string from enum */ > @@ -59,6 +63,7 @@ void* ZSTD_customMalloc(size_t size, ZSTD_customMem customMem) > return customMem.customAlloc(customMem.opaque, size); > return ZSTD_malloc(size); > } > +EXPORT_SYMBOL_GPL(ZSTD_customMalloc); > > void* ZSTD_customCalloc(size_t size, ZSTD_customMem customMem) > { > @@ -71,6 +76,7 @@ void* ZSTD_customCalloc(size_t size, ZSTD_customMem customMem) > } > return ZSTD_calloc(1, size); > } > +EXPORT_SYMBOL_GPL(ZSTD_customCalloc); > > void ZSTD_customFree(void* ptr, ZSTD_customMem customMem) > { > @@ -81,3 +87,7 @@ void ZSTD_customFree(void* ptr, ZSTD_customMem customMem) > ZSTD_free(ptr); > } > } > +EXPORT_SYMBOL_GPL(ZSTD_customFree); > + > +MODULE_LICENSE("Dual BSD/GPL"); > +MODULE_DESCRIPTION("Zstd Common"); > diff --git a/lib/Kconfig b/lib/Kconfig > index dc1ab2ed1dc6..3ea8941ab18d 100644 > --- a/lib/Kconfig > +++ b/lib/Kconfig > @@ -343,12 +343,16 @@ config LZ4HC_COMPRESS > config LZ4_DECOMPRESS > tristate > > +config ZSTD_COMMON > + select XXHASH > + tristate > + > config ZSTD_COMPRESS > - select XXHASH > + select ZSTD_COMMON > tristate > > config ZSTD_DECOMPRESS > - select XXHASH > + select ZSTD_COMMON > tristate > > source "lib/xz/Kconfig" > -- > 2.37.3 > -- Best Regards Masahiro Yamada