From patchwork Fri Dec 23 14:36:01 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wainer dos Santos Moschetta X-Patchwork-Id: 18665 X-Patchwork-Delegate: tuliom@linux.vnet.ibm.com Received: (qmail 105050 invoked by alias); 23 Dec 2016 14:36:17 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 104980 invoked by uid 89); 23 Dec 2016 14:36:17 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.8 required=5.0 tests=AWL, BAYES_50, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_LOW autolearn=no version=3.3.2 spammy=le, ifneq, U*wainersm, wainersmlinuxvnetibmcom X-HELO: mx0a-001b2d01.pphosted.com From: Wainer dos Santos Moschetta To: libc-alpha@sourceware.org Subject: [PATCH v2] powerpc: add tests for __ppc_set_ppr_* functions. Date: Fri, 23 Dec 2016 12:36:01 -0200 In-Reply-To: References: X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16122314-1523-0000-0000-0000025C8E52 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16122314-1524-0000-0000-000029E7BC76 Message-Id: <20161223143601.24299-1-wainersm@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2016-12-23_12:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=4 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1612050000 definitions=main-1612230244 Changes since v1: - Replaced "Test" with "Test" on first line of comment. -- >8 -- sys/platform/ppc.h defines a class of __ppc_set_ppr functions used to set the Program Priority Register (PPR) in powerpc. This patch implements test cases for these functions. Tested on ppc64le. 2016-12-20 Wainer dos Santos Moschetta * sysdeps/powerpc/tst-set_ppr.c: New file. Implement test cases for __ppc_set_ppr_* functions. * sysdeps/powerpc/Makefile ($(subdir),misc): Add tst-set_ppr in the list of tests. --- sysdeps/powerpc/Makefile | 1 + sysdeps/powerpc/tst-set_ppr.c | 76 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 sysdeps/powerpc/tst-set_ppr.c diff --git a/sysdeps/powerpc/Makefile b/sysdeps/powerpc/Makefile index 099fbf6..933810f 100644 --- a/sysdeps/powerpc/Makefile +++ b/sysdeps/powerpc/Makefile @@ -34,6 +34,7 @@ endif ifeq ($(subdir),misc) sysdep_headers += sys/platform/ppc.h tests += test-gettimebase +tests += tst-set_ppr endif ifneq (,$(filter %le,$(config-machine))) diff --git a/sysdeps/powerpc/tst-set_ppr.c b/sysdeps/powerpc/tst-set_ppr.c new file mode 100644 index 0000000..6c1bf6c --- /dev/null +++ b/sysdeps/powerpc/tst-set_ppr.c @@ -0,0 +1,76 @@ +/* Tests the implementation of __ppc_set_ppr_* functions. + Copyright (C) 2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include + +#include + +/* Read the value of the Program Priority Register (PPR). */ +static __inline__ uint64_t +read_ppr (void) +{ + /* Represents the full 64-bits length register. */ + uint64_t ppr; + asm volatile ("mfppr %0" : "=r"(ppr)); + return ppr; +} + +/* Check the thread priority bits of PPR are set as expected. */ +uint8_t +check_thread_priority (uint8_t expected, uint64_t ppr) +{ + /* The thread priority value is set on bits 11:13. */ + uint64_t p = ((ppr >> 50) & 7); + if (p != expected) + { + printf ("FAIL: Expected %"PRIu8" got %"PRIu64".\n", expected, p); + return 1; + } + printf ("PASS: Thread priority set to %"PRIu64" correctly.\n", p); + return 0; +} + +/* The Power ISA 2.07b allows the following thread priorities for any + problem state program: 1 (very low), 2 (low), 3 (medium low), + and 4 (medium). + Check whether the values set by __ppc_set_ppr_* are correct. */ +static int +do_test (void) +{ + uint8_t rc = 0; + +#ifdef _ARCH_PWR8 + __ppc_set_ppr_very_low (); + rc |= check_thread_priority (1, read_ppr()); +#endif /* _ARCH_PWR8 */ + + __ppc_set_ppr_low (); + rc |= check_thread_priority (2, read_ppr()); + + __ppc_set_ppr_med_low (); + rc |= check_thread_priority (3, read_ppr()); + + __ppc_set_ppr_med (); + rc |= check_thread_priority (4, read_ppr()); + + return rc; +} + +#include