From patchwork Thu Dec 22 12:13:00 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: 18639 Received: (qmail 42368 invoked by alias); 22 Dec 2016 12:13:27 -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 42355 invoked by uid 89); 22 Dec 2016 12:13:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.6 required=5.0 tests=BAYES_00, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_LOW autolearn=no version=3.3.2 spammy=santos, Santos, le, HX-Proofpoint-Spam-Details:main-1612220206 X-HELO: mx0a-001b2d01.pphosted.com From: Wainer dos Santos Moschetta To: libc-alpha@sourceware.org Subject: [PATCH] powerpc: add tests for __ppc_set_ppr_* functions. Date: Thu, 22 Dec 2016 10:13:00 -0200 X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16122212-0020-0000-0000-0000027420A0 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16122212-0021-0000-0000-0000308C47DB Message-Id: <20161222121300.28285-1-wainersm@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2016-12-22_09:, , 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-1612220206 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..4c89fd4 --- /dev/null +++ b/sysdeps/powerpc/tst-set_ppr.c @@ -0,0 +1,76 @@ +/* Test 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