Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update DEFAULT_KERNEL_FOR_PGO to 6.10.0 #274

Merged
merged 3 commits into from
Jul 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build-llvm.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
GOOD_REVISION = '15397583e3d85eb1f1a051de26eb409aaedd3b54'

# The version of the Linux kernel that the script downloads if necessary
DEFAULT_KERNEL_FOR_PGO = (6, 9, 0)
DEFAULT_KERNEL_FOR_PGO = (6, 10, 0)

parser = ArgumentParser(formatter_class=RawTextHelpFormatter)
clone_options = parser.add_mutually_exclusive_group()
Expand Down
69 changes: 69 additions & 0 deletions src/2bac084468847cfe5bbc7166082b2a208514bb1c.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
From 2bac084468847cfe5bbc7166082b2a208514bb1c Mon Sep 17 00:00:00 2001
From: Bill Wendling <[email protected]>
Date: Wed, 29 May 2024 14:54:44 -0700
Subject: drm/radeon: Remove __counted_by from StateArray.states[]

Work for __counted_by on generic pointers in structures (not just
flexible array members) has started landing in Clang 19 (current tip of
tree). During the development of this feature, a restriction was added
to __counted_by to prevent the flexible array member's element type from
including a flexible array member itself such as:

struct foo {
int count;
char buf[];
};

struct bar {
int count;
struct foo data[] __counted_by(count);
};

because the size of data cannot be calculated with the standard array
size formula:

sizeof(struct foo) * count

This restriction was downgraded to a warning but due to CONFIG_WERROR,
it can still break the build. The application of __counted_by on the
states member of 'struct _StateArray' triggers this restriction,
resulting in:

drivers/gpu/drm/radeon/pptable.h:442:5: error: 'counted_by' should not be applied to an array with element of unknown size because 'ATOM_PPLIB_STATE_V2' (aka 'struct _ATOM_PPLIB_STATE_V2') is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
442 | ATOM_PPLIB_STATE_V2 states[] __counted_by(ucNumEntries);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

Remove this use of __counted_by to fix the warning/error. However,
rather than remove it altogether, leave it commented, as it may be
possible to support this in future compiler releases.

Cc: [email protected]
Closes: https://github.com/ClangBuiltLinux/linux/issues/2028
Fixes: efade6fe50e7 ("drm/radeon: silence UBSAN warning (v3)")
Signed-off-by: Bill Wendling <[email protected]>
Co-developed-by: Nathan Chancellor <[email protected]>
Signed-off-by: Nathan Chancellor <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
---
Link: https://git.kernel.org/linus/2bac084468847cfe5bbc7166082b2a208514bb1c
---
drivers/gpu/drm/radeon/pptable.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/radeon/pptable.h b/drivers/gpu/drm/radeon/pptable.h
index b7f22597ee95e7..969a8fb0ee9e0b 100644
--- a/drivers/gpu/drm/radeon/pptable.h
+++ b/drivers/gpu/drm/radeon/pptable.h
@@ -439,7 +439,7 @@ typedef struct _StateArray{
//how many states we have
UCHAR ucNumEntries;

- ATOM_PPLIB_STATE_V2 states[] __counted_by(ucNumEntries);
+ ATOM_PPLIB_STATE_V2 states[] /* __counted_by(ucNumEntries) */;
}StateArray;


--
cgit 1.2.3-korg

38 changes: 35 additions & 3 deletions tc_build/kernel.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from pathlib import Path
import shutil
import subprocess
from tempfile import NamedTemporaryFile
import time

from tc_build.builder import Builder
Expand All @@ -23,7 +24,7 @@ def __init__(self, arch):

self.bolt_instrumentation = False
self.bolt_sampling_output = None
self.config_targets = None
self.config_targets = []
self.cross_compile = None
self.make_variables = {
'ARCH': arch,
Expand Down Expand Up @@ -60,6 +61,34 @@ def build(self):
self.make_variables['LLVM_IAS'] = '0'
self.make_variables['O'] = self.folders.build

self.clean_build_folder()

kconfig_allconfig = None
# allmodconfig enables CONFIG_WERROR and other subsystem specific
# -Werror configurations. Ensure all known configurations get disabled
# via KCONFIG_ALLCONFIG, as they may override KCFLAGS=-Werror.
if 'allmodconfig' in self.config_targets:
self.folders.build.mkdir(parents=True)

# Using a context manager for this would seriously convolute this
# code, as we need to use the name of the object in make_cmd but
# delete it after actually running the command so the rest of the
# code after this function would need another level of indent. We
# know that from this point forward, the function can only throw an
# exception when calling make_cmd, so we can just wrap that in a
# try: ... finally: ... statement to ensure that this file is
# always cleaned up.
# pylint: disable-next=consider-using-with
kconfig_allconfig = NamedTemporaryFile(dir=self.folders.build)

configs_to_disable = ['DRM_WERROR', 'WERROR']
kconfig_allconfig_text = ''.join(f"CONFIG_{val}=n\n"
for val in configs_to_disable).encode('utf-8')

kconfig_allconfig.write(kconfig_allconfig_text)
kconfig_allconfig.seek(0)
self.make_variables['KCONFIG_ALLCONFIG'] = kconfig_allconfig.name

make_cmd = []
if self.bolt_sampling_output:
make_cmd += [
Expand All @@ -77,9 +106,12 @@ def build(self):
# Ideally, the kernel would always clobber user flags via ':=' but we deal with reality.
os.environ.pop('CFLAGS', '')

self.clean_build_folder()
build_start = time.time()
self.run_cmd(make_cmd)
try:
self.run_cmd(make_cmd)
finally:
if kconfig_allconfig:
kconfig_allconfig.close()
tc_build.utils.print_info(f"Build duration: {tc_build.utils.get_duration(build_start)}")

def can_use_ias(self):
Expand Down