diff options
author | Stefan Hajnoczi | 2022-11-17 18:39:16 +0100 |
---|---|---|
committer | Stefan Hajnoczi | 2022-11-17 18:39:16 +0100 |
commit | 2be954aa59f1e61ec6ad11b3e07bef03e186fb83 (patch) | |
tree | 30012cd4e9eaffde9e8470bbac3eceff1ab18ced | |
parent | Update VERSION for v7.2.0-rc1 (diff) | |
parent | acpi/tests/avocado/bits: some misc fixes (diff) | |
download | qemu-2be954aa59f1e61ec6ad11b3e07bef03e186fb83.tar.gz qemu-2be954aa59f1e61ec6ad11b3e07bef03e186fb83.tar.xz qemu-2be954aa59f1e61ec6ad11b3e07bef03e186fb83.zip |
Merge tag 'pull-request-2022-11-17' of https://gitlab.com/thuth/qemu into staging
* Add s390x documentation for the "loadparm" machine parameter
* Spelling fixes in the s390x code
* Update the macOS Cirrus-CI job to use aarch64 hosts
* Increase timeout and fix comments in the acpi avacodo test
# -----BEGIN PGP SIGNATURE-----
#
# iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmN1+DYRHHRodXRoQHJl
# ZGhhdC5jb20ACgkQLtnXdP5wLbVg+A//Zt85xV8CEIVHRcvP3CPC35/goJ5O73Yj
# WwU2mck/1F0g06nsxrlAKpQuh82BJ+qRNpTnCY4n+owNO1oMgNZ7Em2vNlVjazvQ
# 7xsMpTvasoudYaQHES4Dz3l8j8E7Y1Xc3uks/Y5jBqXR5R+G2Pu2iSYDv8VGBjqt
# v4Cmjk48j9taVeYosYfHVOH17TRbAYDVqtppLtEWil8Zqjn7FKPDhexszaCIfql/
# M7CmTEjB6myt4Gjrby7HHEII1rorhYI0A+0Y6qyYA8EuF69f1tuqpLtImTycXFVF
# 7Wkx+9QAvPQsO+LmpK5ZYvsLPkouPqgvvxERCzI1mZkDqRs5TF0rIyQPaJfL8G8x
# RF0CVkIHER8umCNBfCThIsNYMesfWgFhoNOTmJyoJRb3OagPlIhkhx8zRXZ4MwIM
# 6tfhYWQa3SGVNWs6dzYwfHGw67/YuU8RT/6q9pPsUgHMoPSFc0aYsyD5hTyY6hOX
# 49SrDnv4rwLGutFiI1VR8/W8DPVXpn714hOJbSk1RRfXj8ZboHtQPBRrrBchMK4+
# kb/PgGLO2eOljR9mrCwpXNmJdeZ2KiOlhak2vV1rqjdOUsYc1u8k6tnwrJJjVu45
# JoT4/tWgDrfFcY9srngYlk2NzaUrloTIWSltAc31nq+1RfZsiyuDAnKZFH2v1Y0j
# fTFq2CFm7rE=
# =eS4s
# -----END PGP SIGNATURE-----
# gpg: Signature made Thu 17 Nov 2022 04:00:38 EST
# gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5
# gpg: issuer "thuth@redhat.com"
# gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full]
# gpg: aka "Thomas Huth <thuth@redhat.com>" [full]
# gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full]
# gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown]
# Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5
* tag 'pull-request-2022-11-17' of https://gitlab.com/thuth/qemu:
acpi/tests/avocado/bits: some misc fixes
ci: replace x86_64 macos-11 with aarch64 macos-12
docs/system/s390x: Document the "loadparm" machine property
s390x: Fix spelling errors
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
-rw-r--r-- | .gitlab-ci.d/cirrus.yml | 12 | ||||
-rw-r--r-- | .gitlab-ci.d/cirrus/macos-12.vars (renamed from .gitlab-ci.d/cirrus/macos-11.vars) | 12 | ||||
-rw-r--r-- | docs/devel/acpi-bits.rst | 12 | ||||
-rw-r--r-- | docs/system/s390x/bootdevices.rst | 26 | ||||
-rw-r--r-- | hw/s390x/ipl.h | 2 | ||||
-rw-r--r-- | hw/s390x/s390-pci-vfio.c | 2 | ||||
-rw-r--r-- | hw/s390x/s390-virtio-ccw.c | 6 | ||||
-rw-r--r-- | pc-bios/s390-ccw/cio.h | 2 | ||||
-rw-r--r-- | pc-bios/s390-ccw/iplb.h | 2 | ||||
-rw-r--r-- | pc-bios/s390-ccw/start.S | 2 | ||||
-rw-r--r-- | target/s390x/cpu_models.h | 4 | ||||
-rw-r--r-- | target/s390x/ioinst.c | 2 | ||||
-rw-r--r-- | target/s390x/tcg/excp_helper.c | 2 | ||||
-rw-r--r-- | target/s390x/tcg/fpu_helper.c | 2 | ||||
-rw-r--r-- | target/s390x/tcg/misc_helper.c | 2 | ||||
-rw-r--r-- | target/s390x/tcg/translate.c | 4 | ||||
-rw-r--r-- | target/s390x/tcg/translate_vx.c.inc | 6 | ||||
-rw-r--r-- | tests/avocado/acpi-bits.py | 3 | ||||
m--------- | tests/lcitool/libvirt-ci | 0 | ||||
-rwxr-xr-x | tests/lcitool/refresh | 2 |
20 files changed, 65 insertions, 40 deletions
diff --git a/.gitlab-ci.d/cirrus.yml b/.gitlab-ci.d/cirrus.yml index d70da61248..634a73a742 100644 --- a/.gitlab-ci.d/cirrus.yml +++ b/.gitlab-ci.d/cirrus.yml @@ -70,19 +70,19 @@ x64-freebsd-13-build: INSTALL_COMMAND: pkg install -y TEST_TARGETS: check -x64-macos-11-base-build: +aarch64-macos-12-base-build: extends: .cirrus_build_job variables: - NAME: macos-11 - CIRRUS_VM_INSTANCE_TYPE: osx_instance + NAME: macos-12 + CIRRUS_VM_INSTANCE_TYPE: macos_instance CIRRUS_VM_IMAGE_SELECTOR: image - CIRRUS_VM_IMAGE_NAME: big-sur-base + CIRRUS_VM_IMAGE_NAME: ghcr.io/cirruslabs/macos-monterey-base:latest CIRRUS_VM_CPUS: 12 CIRRUS_VM_RAM: 24G UPDATE_COMMAND: brew update INSTALL_COMMAND: brew install - PATH_EXTRA: /usr/local/opt/ccache/libexec:/usr/local/opt/gettext/bin - PKG_CONFIG_PATH: /usr/local/opt/curl/lib/pkgconfig:/usr/local/opt/ncurses/lib/pkgconfig:/usr/local/opt/readline/lib/pkgconfig + PATH_EXTRA: /opt/homebrew/ccache/libexec:/opt/homebrew/gettext/bin + PKG_CONFIG_PATH: /opt/homebrew/curl/lib/pkgconfig:/opt/homebrew/ncurses/lib/pkgconfig:/opt/homebrew/readline/lib/pkgconfig TEST_TARGETS: check-unit check-block check-qapi-schema check-softfloat check-qtest-x86_64 diff --git a/.gitlab-ci.d/cirrus/macos-11.vars b/.gitlab-ci.d/cirrus/macos-12.vars index aee9f50de6..ef9e14b373 100644 --- a/.gitlab-ci.d/cirrus/macos-11.vars +++ b/.gitlab-ci.d/cirrus/macos-12.vars @@ -1,16 +1,16 @@ # THIS FILE WAS AUTO-GENERATED # -# $ lcitool variables macos-11 qemu +# $ lcitool variables macos-12 qemu # # https://gitlab.com/libvirt/libvirt-ci -CCACHE='/usr/local/bin/ccache' +CCACHE='/opt/homebrew/bin/ccache' CPAN_PKGS='' CROSS_PKGS='' -MAKE='/usr/local/bin/gmake' -NINJA='/usr/local/bin/ninja' +MAKE='/opt/homebrew/bin/gmake' +NINJA='/opt/homebrew/bin/ninja' PACKAGING_COMMAND='brew' -PIP3='/usr/local/bin/pip3' +PIP3='/opt/homebrew/bin/pip3' PKGS='bash bc bison bzip2 capstone ccache cmocka ctags curl dbus diffutils dtc flex gcovr gettext git glib gnu-sed gnutls gtk+3 jemalloc jpeg-turbo json-c libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb llvm lzo make meson ncurses nettle ninja perl pixman pkg-config python3 rpm2cpio sdl2 sdl2_image snappy sparse spice-protocol tesseract texinfo usbredir vde vte3 zlib zstd' PYPI_PKGS='PyYAML numpy pillow sphinx sphinx-rtd-theme' -PYTHON='/usr/local/bin/python3' +PYTHON='/opt/homebrew/bin/python3' diff --git a/docs/devel/acpi-bits.rst b/docs/devel/acpi-bits.rst index 5e22be8ef6..4a94c7d83d 100644 --- a/docs/devel/acpi-bits.rst +++ b/docs/devel/acpi-bits.rst @@ -16,11 +16,8 @@ end user. The other is that we have more control of what we wanted to test and how by directly using acpica interpreter on top of the bios on a running system. More details on the inspiration for developing biosbits and its real life uses can be found in [#a]_ and [#b]_. -This directory contains tests written in python using avocado framework that -exercises the QEMU bios components using biosbits and reports test failures. For QEMU, we maintain a fork of bios bits in gitlab along with all the -dependent submodules: -https://gitlab.com/qemu-project/biosbits-bits +dependent submodules here: https://gitlab.com/qemu-project/biosbits-bits This fork contains numerous fixes, a newer acpica and changes specific to running this avocado QEMU tests using bits. The author of this document is the sole maintainer of the QEMU fork of bios bits repo. @@ -38,10 +35,9 @@ Under ``tests/avocado/`` as the root we have: │ ├── bits-config │ │ └── bits-cfg.txt │ ├── bits-tests - │ │ ├── smbios.py2 - │ │ ├── testacpi.py2 - │ │ └── testcpuid.py2 - │ └── README + │ ├── smbios.py2 + │ ├── testacpi.py2 + │ └── testcpuid.py2 ├── acpi-bits.py * ``tests/avocado``: diff --git a/docs/system/s390x/bootdevices.rst b/docs/system/s390x/bootdevices.rst index b5950133e8..1a7a18b43b 100644 --- a/docs/system/s390x/bootdevices.rst +++ b/docs/system/s390x/bootdevices.rst @@ -53,6 +53,32 @@ recommended to specify a CD-ROM device via ``-device scsi-cd`` (as mentioned above) instead. +Selecting kernels with the ``loadparm`` property +------------------------------------------------ + +The ``s390-ccw-virtio`` machine supports the so-called ``loadparm`` parameter +which can be used to select the kernel on the disk of the guest that the +s390-ccw bios should boot. When starting QEMU, it can be specified like this:: + + qemu-system-s390x -machine s390-ccw-virtio,loadparm=<string> + +The first way to use this parameter is to use the word ``PROMPT`` as the +``<string>`` here. In that case the s390-ccw bios will show a list of +installed kernels on the disk of the guest and ask the user to enter a number +to chose which kernel should be booted -- similar to what can be achieved by +specifying the ``-boot menu=on`` option when starting QEMU. Note that the menu +list will only show the names of the installed kernels when using a DASD-like +disk image with 4k byte sectors. On normal SCSI-style disks with 512-byte +sectors, there is not enough space for the zipl loader on the disk to store +the kernel names, so you only get a list without names here. + +The second way to use this parameter is to use a number in the range from 0 +to 31. The numbers that can be used here correspond to the numbers that are +shown when using the ``PROMPT`` option, and the s390-ccw bios will then try +to automatically boot the kernel that is associated with the given number. +Note that ``0`` can be used to boot the default entry. + + Booting from a network device ----------------------------- diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h index dfc6dfd89c..7fc86e7905 100644 --- a/hw/s390x/ipl.h +++ b/hw/s390x/ipl.h @@ -140,7 +140,7 @@ void s390_ipl_clear_reset_request(void); * have an offset of 4 + n * 8 bytes within the struct in order * to keep it double-word aligned. * The total size of the struct must never exceed 28 bytes. - * This definition must be kept in sync with the defininition + * This definition must be kept in sync with the definition * in pc-bios/s390-ccw/iplb.h. */ struct QemuIplParameters { diff --git a/hw/s390x/s390-pci-vfio.c b/hw/s390x/s390-pci-vfio.c index 2aefa508a0..5f0adb0b4a 100644 --- a/hw/s390x/s390-pci-vfio.c +++ b/hw/s390x/s390-pci-vfio.c @@ -313,7 +313,7 @@ retry: /* * Get the host function handle from the vfio CLP capabilities chain. Returns * true if a fh value was placed into the provided buffer. Returns false - * if a fh could not be obtained (ioctl failed or capabilitiy version does + * if a fh could not be obtained (ioctl failed or capability version does * not include the fh) */ bool s390_pci_get_host_fh(S390PCIBusDevice *pbdev, uint32_t *fh) diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index 7d80bc1837..2e64ffab45 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -354,7 +354,7 @@ static int s390_machine_protect(S390CcwMachineState *ms) } error_setg(&pv_mig_blocker, - "protected VMs are currently not migrateable."); + "protected VMs are currently not migratable."); rc = migrate_add_blocker(pv_mig_blocker, &local_err); if (rc) { ram_block_discard_disable(false); @@ -449,7 +449,7 @@ static void s390_machine_reset(MachineState *machine, ShutdownCause reason) break; case S390_RESET_MODIFIED_CLEAR: /* - * Susbsystem reset needs to be done before we unshare memory + * Subsystem reset needs to be done before we unshare memory * and lose access to VIRTIO structures in guest memory. */ subsystem_reset(); @@ -462,7 +462,7 @@ static void s390_machine_reset(MachineState *machine, ShutdownCause reason) break; case S390_RESET_LOAD_NORMAL: /* - * Susbsystem reset needs to be done before we unshare memory + * Subsystem reset needs to be done before we unshare memory * and lose access to VIRTIO structures in guest memory. */ subsystem_reset(); diff --git a/pc-bios/s390-ccw/cio.h b/pc-bios/s390-ccw/cio.h index 1e5d4e92e1..88a88adfd2 100644 --- a/pc-bios/s390-ccw/cio.h +++ b/pc-bios/s390-ccw/cio.h @@ -20,7 +20,7 @@ struct pmcw { __u32 intparm; /* interruption parameter */ __u32 qf:1; /* qdio facility */ __u32 w:1; - __u32 isc:3; /* interruption sublass */ + __u32 isc:3; /* interruption subclass */ __u32 res5:3; /* reserved zeros */ __u32 ena:1; /* enabled */ __u32 lm:2; /* limit mode */ diff --git a/pc-bios/s390-ccw/iplb.h b/pc-bios/s390-ccw/iplb.h index 772d5c57c9..cb6ac8a880 100644 --- a/pc-bios/s390-ccw/iplb.h +++ b/pc-bios/s390-ccw/iplb.h @@ -81,7 +81,7 @@ extern IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE))); #define QIPL_FLAG_BM_OPTS_ZIPL 0x40 /* - * This definition must be kept in sync with the defininition + * This definition must be kept in sync with the definition * in hw/s390x/ipl.h */ struct QemuIplParameters { diff --git a/pc-bios/s390-ccw/start.S b/pc-bios/s390-ccw/start.S index 4d5ad21653..6072906df4 100644 --- a/pc-bios/s390-ccw/start.S +++ b/pc-bios/s390-ccw/start.S @@ -19,7 +19,7 @@ _start: larl %r2, __bss_start larl %r3, _end slgr %r3, %r2 /* get sizeof bss */ - ltgr %r3,%r3 /* bss emtpy? */ + ltgr %r3,%r3 /* bss empty? */ jz done aghi %r3,-1 srlg %r4,%r3,8 /* how many 256 byte chunks? */ diff --git a/target/s390x/cpu_models.h b/target/s390x/cpu_models.h index 74d1f87e4f..fb1adc8b21 100644 --- a/target/s390x/cpu_models.h +++ b/target/s390x/cpu_models.h @@ -24,13 +24,13 @@ struct S390CPUDef { uint8_t gen; /* hw generation identification */ uint16_t type; /* cpu type identification */ uint8_t ec_ga; /* EC GA version (on which also the BC is based) */ - uint8_t mha_pow; /* Maximum Host Adress Power, mha = 2^pow-1 */ + uint8_t mha_pow; /* maximum host address power, mha = 2^pow-1 */ uint32_t hmfai; /* hypervisor-managed facilities */ /* base/min features, must never be changed between QEMU versions */ S390FeatBitmap base_feat; /* used to init base_feat from generated data */ S390FeatInit base_init; - /* deafault features, QEMU version specific */ + /* default features, QEMU version specific */ S390FeatBitmap default_feat; /* used to init default_feat from generated data */ S390FeatInit default_init; diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c index b12f18d346..053aaabb5a 100644 --- a/target/s390x/ioinst.c +++ b/target/s390x/ioinst.c @@ -285,7 +285,7 @@ void ioinst_handle_stsch(S390CPU *cpu, uint64_t reg1, uint32_t ipb, /* * As operand exceptions have a lower priority than access exceptions, * we check whether the memory area is writable (injecting the - * access execption if it is not) first. + * access exception if it is not) first. */ if (!s390_cpu_virt_mem_check_write(cpu, addr, ar, sizeof(schib))) { s390_program_interrupt(env, PGM_OPERAND, ra); diff --git a/target/s390x/tcg/excp_helper.c b/target/s390x/tcg/excp_helper.c index 2cd6d062b9..fe02d82201 100644 --- a/target/s390x/tcg/excp_helper.c +++ b/target/s390x/tcg/excp_helper.c @@ -553,7 +553,7 @@ try_deliver: /* don't trigger a cpu_loop_exit(), use an interrupt instead */ cpu_interrupt(CPU(cpu), CPU_INTERRUPT_HALT); } else if (cs->halted) { - /* unhalt if we had a WAIT PSW somehwere in our injection chain */ + /* unhalt if we had a WAIT PSW somewhere in our injection chain */ s390_cpu_unhalt(cpu); } } diff --git a/target/s390x/tcg/fpu_helper.c b/target/s390x/tcg/fpu_helper.c index 4067205405..be80b2373c 100644 --- a/target/s390x/tcg/fpu_helper.c +++ b/target/s390x/tcg/fpu_helper.c @@ -89,7 +89,7 @@ static void handle_exceptions(CPUS390XState *env, bool XxC, uintptr_t retaddr) /* * invalid/divbyzero cannot coexist with other conditions. * overflow/underflow however can coexist with inexact, we have to - * handle it separatly. + * handle it separately. */ if (s390_exc & ~S390_IEEE_MASK_INEXACT) { if (s390_exc & ~S390_IEEE_MASK_INEXACT & env->fpc >> 24) { diff --git a/target/s390x/tcg/misc_helper.c b/target/s390x/tcg/misc_helper.c index 10dadb002a..71388a7119 100644 --- a/target/s390x/tcg/misc_helper.c +++ b/target/s390x/tcg/misc_helper.c @@ -333,7 +333,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0, uint64_t r0, uint64_t r1) /* same as machine type number in STORE CPU ID, but in EBCDIC */ snprintf(type, ARRAY_SIZE(type), "%X", cpu->model->def->type); ebcdic_put(sysib.sysib_111.type, type, 4); - /* model number (not stored in STORE CPU ID for z/Architecure) */ + /* model number (not stored in STORE CPU ID for z/Architecture) */ ebcdic_put(sysib.sysib_111.model, "QEMU ", 16); ebcdic_put(sysib.sysib_111.sequence, "QEMU ", 16); ebcdic_put(sysib.sysib_111.plant, "QEMU", 4); diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index 2fbdab7252..1e599ac259 100644 --- a/target/s390x/tcg/translate.c +++ b/target/s390x/tcg/translate.c @@ -435,7 +435,7 @@ static void gen_program_exception(DisasContext *s, int code) { TCGv_i32 tmp; - /* Remember what pgm exeption this was. */ + /* Remember what pgm exception this was. */ tmp = tcg_const_i32(code); tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUS390XState, int_pgm_code)); tcg_temp_free_i32(tmp); @@ -491,7 +491,7 @@ static TCGv_i64 get_address(DisasContext *s, int x2, int b2, int d2) /* * Note that d2 is limited to 20 bits, signed. If we crop negative - * displacements early we create larger immedate addends. + * displacements early we create larger immediate addends. */ if (b2 && x2) { tcg_gen_add_i64(tmp, regs[b2], regs[x2]); diff --git a/target/s390x/tcg/translate_vx.c.inc b/target/s390x/tcg/translate_vx.c.inc index b69c1a111c..d39ee81cd6 100644 --- a/target/s390x/tcg/translate_vx.c.inc +++ b/target/s390x/tcg/translate_vx.c.inc @@ -960,7 +960,7 @@ static DisasJumpType op_vpk(DisasContext *s, DisasOps *o) } break; case 0x94: - /* If sources and destination dont't overlap -> fast path */ + /* If sources and destination don't overlap -> fast path */ if (v1 != v2 && v1 != v3) { const uint8_t src_es = get_field(s, m4); const uint8_t dst_es = src_es - 1; @@ -2075,7 +2075,7 @@ static DisasJumpType op_vmsl(DisasContext *s, DisasOps *o) l2 = tcg_temp_new_i64(); h2 = tcg_temp_new_i64(); - /* Multipy both even elements from v2 and v3 */ + /* Multiply both even elements from v2 and v3 */ read_vec_element_i64(l1, get_field(s, v2), 0, ES_64); read_vec_element_i64(h1, get_field(s, v3), 0, ES_64); tcg_gen_mulu2_i64(l1, h1, l1, h1); @@ -2084,7 +2084,7 @@ static DisasJumpType op_vmsl(DisasContext *s, DisasOps *o) tcg_gen_add2_i64(l1, h1, l1, h1, l1, h1); } - /* Multipy both odd elements from v2 and v3 */ + /* Multiply both odd elements from v2 and v3 */ read_vec_element_i64(l2, get_field(s, v2), 1, ES_64); read_vec_element_i64(h2, get_field(s, v3), 1, ES_64); tcg_gen_mulu2_i64(l2, h2, l2, h2); diff --git a/tests/avocado/acpi-bits.py b/tests/avocado/acpi-bits.py index 8745a58a76..9ac87f01f1 100644 --- a/tests/avocado/acpi-bits.py +++ b/tests/avocado/acpi-bits.py @@ -134,6 +134,9 @@ class AcpiBitsTest(QemuBaseTest): #pylint: disable=too-many-instance-attributes :avocado: tags=acpi """ + # in slower systems the test can take as long as 3 minutes to complete. + timeout = 200 + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._vm = None diff --git a/tests/lcitool/libvirt-ci b/tests/lcitool/libvirt-ci -Subproject d40e203631eb3eacee17e8cf8fd20aa5152db62 +Subproject e3eb28cf2e17fbcf7fe7e19505ee432b8ec5bbb diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh index ce0b24c0b1..fa966e4009 100755 --- a/tests/lcitool/refresh +++ b/tests/lcitool/refresh @@ -176,7 +176,7 @@ try: # generate_cirrus("freebsd-12") generate_cirrus("freebsd-13") - generate_cirrus("macos-11") + generate_cirrus("macos-12") sys.exit(0) except Exception as ex: |