Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754438AbbHYBMA (ORCPT ); Mon, 24 Aug 2015 21:12:00 -0400 Received: from mail-bn1on0131.outbound.protection.outlook.com ([157.56.110.131]:32413 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751060AbbHYBL5 convert rfc822-to-8bit (ORCPT ); Mon, 24 Aug 2015 21:11:57 -0400 Authentication-Results: spf=none (sender IP is 165.204.84.221) smtp.mailfrom=amd.com; amacapital.net; dkim=none (message not signed) header.d=none; X-WSS-ID: 0NTLYVH-07-M75-02 X-M-MSG: Message-ID: <55DB9C9D.7020003@amd.com> Date: Mon, 24 Aug 2015 17:37:17 -0500 From: sherry hurwitz User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: Jiri Olsa , Andy Lutomirski CC: Borislav Petkov , "linux-kernel@vger.kernel.org" , X86 ML , Peter Zijlstra , Ingo Molnar , Robert Richter , "H. Peter Anvin" , Thomas Gleixner , Arnaldo Carvalho de Melo , "Namhyung Kim" , Jan Stancek , "Suravee Suthikulpanit" Subject: Re: [BUG/RFC] perf test fails on AMD CPUs References: <20150816222956.GA14290@krava.brq.redhat.com> <20150817043603.GB9387@nazgul.tnic> <20150818101025.GA15340@krava.brq.redhat.com> In-Reply-To: <20150818101025.GA15340@krava.brq.redhat.com> Content-Type: text/plain; charset="utf-8"; format=flowed X-Originating-IP: [10.180.168.240] Content-Transfer-Encoding: 8BIT X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD036;1:JVPtobpP/tS5WIxFkkg03w08vaCL7TcveyQxVWTB2EKNxm42VewTHZ5LCuMo15lanRslTWhEIYnTQMP3+HciWRCwMgvR4S5koGRvW7RjPTuW4ph1a5jEMxhn8kyMCbCzSy41bAvdA16J30MHCweIU4ZqZ0XyHl1Kohp2upeD2v3ByRg+3y3d4isDuhpPW24UuZRyj6e5AYN1bU7uhwQyMkJVZmVr91z5L5b2mic40HyQCrOq857krlJdAYF8Fz7ZhsY0DPwyqNT4IYrCThXGPDbSpWNtQu4jWdQi+NFTzZEsvtxvLOMZa9qEA55jJhq4SG/6FcQ++Hw+My4mdIyjDdogcfgEWjE2IFHdEhZ+/812gWkYzrjI8xlJyihi25mmgl67sEvG8OZmySXQqosB7w== X-Forefront-Antispam-Report: CIP:165.204.84.221;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(428002)(3050300001)(199003)(164054003)(52314003)(479174004)(189002)(377454003)(24454002)(189998001)(76176999)(101416001)(59896002)(5001860100001)(97736004)(86152002)(87936001)(65816999)(83506001)(86362001)(46102003)(47776003)(68736005)(64126003)(92566002)(50986999)(19580395003)(4001350100001)(575784001)(5004730100002)(5001830100001)(33656002)(65806001)(5001770100001)(50466002)(64706001)(65956001)(4001540100001)(19580405001)(80316001)(77096005)(23676002)(62966003)(106466001)(5007970100001)(93886004)(36756003)(54356999)(77156002)(105586002)(87266999)(2950100001);DIR:OUT;SFP:1102;SCL:1;SRVR:CY1PR0201MB1500;H:atltwp01.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0201MB1500;2:EBqzKO6WI+wywYCFvzhe536fNip82EkL+hSDSk93p89jdHX6KRXeeQ6gDVuMAIM9p/Z4XWAQjdAE8g1j58e5l1ymy1HtsCEYqV/+oAHfzheofNWwPLHp/EqRSyL9DlKtzKbyUr78yTEuSNiUwz4KGyxNTIgoMJKcukzRBPa+uKE=;3:KXRKf77olEQWME1D1isFKLXnnXuNn2WX7QYlOU1j3GQEqgHXB5FbbP/On6AI0OmDH95KwkXqDB7hya861mwTT0TqajXA65yaUhL4mcJRzTAjmExANKwimsH5JOv8hDmyPj3VHqLbGMTh3CTec5sq7kWrOBtm0uxrY7vQNftohI1m1gqEmM6Y/Bx6uF4rJZZGDT0+v1/HLVxwpEslxbfYAEJAUL/gw5m3PBJqf9WYMvxRePcxdzonPnm83pWLWIpE;25:P2yrMXvl92bh4NPSjPESd2qbWg+zxy2PrJvUzRQYQyV3Z+iAypLb565fhiJ0JPR+U72RBO7vk2+sD5x3XdBQnkx+xnm1nkxiVz21CrmDZTAPGk5R0zMkyxrcOK+hLKUMzaVL2lFbFM9moxb3ASu6h4VZajKdG55Hs9RTxHaodGfThO5VMtnLkJjRzZ1fGCO1gCGE1HQA1YHmF2WyhFVglDTezxZbE53qJVScZ8/1eMiVlLN7etg2yi1COoLPpX0asIKlzQ6IV87MGnfjPksfoQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0201MB1500; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0201MB1500;20:NcU7hnoHvEfdGEqCTUpDFUEYwdhVAYpem2z4X9ZV65kcoDTH4S2R0r5hrWGfBKfzXfHauXbOT5y95FX9PEnhY4LQ8j/eu7HlE/rB9JQCt0ZoHStMMk5XeGPejvH4LUWChZDT7Mxy4Cdu8I3GAGq0nSde0GDlDChMNhOJZ8ji5k5+SkLP6mR3C0oqVGJAOyE8JUJusSysmkb+eTUD/qTZytPYBp8uucUdDv0zM06JdCJUbPKvnHL0+yLv8OlDveIHsqojnSZusnCPhBKJPumYFBVFutWAili/PiDeDjNaytgS2y+57XWYxqCK73/LZ26uwULCZhsy8zK5E/jSGJlUrw8bGIiX1V3zoQXlABj9hYMzjkHHuAPnAR4A/9WSkgsfaTvKcyuXuMYIMIMuopUJKOW6ri/NgBWRaYO4zFKn6cYLH+geIWa/hspaVqGtRutYAPO0LfDbXGnxr1prMt+Th8P7mcGZ7ELrxuM2kDpwhvVq0OOmc/7iIqIc35/ehe2e;4:PwObU4mHjz0LLztRBIpE9zqMdFKP4eUeyQcp1BG4amY1Ff8HoCv/7kbeFQf7zcEzY3D1Skd38pFvwI6poH8CpnSIK1FSTAjGrds0oVciBvLXk9AK2nTK0UnnJLtutVykuuQhp7AEEYI9y423J1f1Olv2ONcujWc3ZDNxmxsXleec+sYZI55BuIAWIHrhTXun2TaTJ4h3q8ry99pNQ/mRk3rDrw2YdeoBk51g6/FedEq5qFMiEzcTeM2O6wde0AjSW9j5ntwXDwkhhyY2qJ8rFE81PlkFUip2tPGxv94AjSQ+KPQuive3V70UKr6kj3vP X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(8121501046)(5005006)(3002001);SRVR:CY1PR0201MB1500;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0201MB1500; X-Forefront-PRVS: 06780E24F8 X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTFQUjAyMDFNQjE1MDA7MjM6N2lvdFBEZkpadFBVVThBWHhaZVNmeStU?= =?utf-8?B?NEo2bXIydkJCNlVzWWphV2R2T0JHd0RlVlZVOXFJOWxnN1kxZXhMc0Y0aE0v?= =?utf-8?B?a0c5NDJFMm1RVjBRTDVJN1FiSGNpMmI3bHlma1BkdlpZQSt1c0VkdlFlTlVt?= =?utf-8?B?eit1RWMrdi9RYjZNWEU5R0xXM0x3Y3pJcUlWalNjbWl1UnA3MXhWZ09uYU9n?= =?utf-8?B?UEMwNDl0YzFjZHNlSVJxRWdhczFaamxnUEdhOWRRdldRaUZzRXJaaUFuOTdM?= =?utf-8?B?bUQ0cENmTlBEQUdKaVBmVVErU2dpQlJjcDJ0dk9wOG02WkhSOWdsT3Q1N1RD?= =?utf-8?B?SkdzNzJTYy94YTNCdkxGenNBR0lhTmRzWVlVbFRvUWFoZVI1VTNOYmlIRWNC?= =?utf-8?B?WWJTRjlKMEFGTnBIV1NYLzNBa1lYT3JnUVNtNlQ2Um1iMkdHVkRsaWI2L0Ft?= =?utf-8?B?blBFUGtjaTAzQWxOYW5zYWhFM0l5UjhwZVdDTlBOMW04WVFvYldEOEVjalZh?= =?utf-8?B?aU9DRDhyV3AzR3ZWTEVCd0JrSEVCWTJjWGhQcytqc253Wk5sMWRiaXhiUWhp?= =?utf-8?B?V3FoRnAzVkZFOTludFljbExOWU1uNWRLMkhkZDQycDZpU2dtWU9QRDhDanUw?= =?utf-8?B?a3A3eDJNY0MzNExzYlc3RXAvS20wYjViald0UkdkaUcyK0Y1Vk1qUk9Cc1Bl?= =?utf-8?B?d2VwNDRCU2FHTGpLVmN4SXloS0U4OUJDZ2tPMFBoeVRMelpvRDlvdk4vOUM3?= =?utf-8?B?Mk1Wb0F1aHpGQVhVWXhONHZKK254UjhXZ2xPZERySEpmODlQOUh5TDVIbUpR?= =?utf-8?B?Q0VuMm1zTXlSRFI1bkMwam1Fc3p4M2VNY1pzNUs4WWFsRWwrcDNrU2N2MFdq?= =?utf-8?B?WlhONzVoMUdYcUx6WWhnRzVkbnU1azJ5OHBKNEFPVUluWnBoSXlTTnZrRkFs?= =?utf-8?B?KzJkQ3haeklHZzhSRHRXaGRTSWVpZWMwK3VTcEdhdTd0YktlUDRxQnBvQ3RW?= =?utf-8?B?TjcvbjBqeWdmOUplTytZclJidEREZXNzTHFubXRxNWFvUGNTMlFONWZGVUhC?= =?utf-8?B?U1JnSFI1Z3hONzRZdUFISGtnZ0w3K01PVDRRWSs3QTVLeEdwZFNBb05xYTVE?= =?utf-8?B?aDRyMERvTnJZdGRVS3B2NkFNckVmUG9wWkpZNXBkbWhpMHhFcUVDcnpnYkFS?= =?utf-8?B?RDZtT1JSZTVrb3FZVEc4Rlg4WStWcjhmTEtlRHJIZTR5bkJHeStXdkZtK1Rh?= =?utf-8?B?RjJJOUdrOTFPT0RRaGVRNTc4MHBLM3VpVFUrNnhHaXc5NUZhQW56UW10ditk?= =?utf-8?B?bndEa05ZekJYZFF4Sm80Q3htWEFmVXRWWmk4OXBMU3U2TUlIUngzUTU1UUZS?= =?utf-8?B?MUhkc2tPWmhOSG5sNWlEcUhpc2lmTEcyY1RGZ09QdFV5Y0NueGJHcmxCbWpM?= =?utf-8?B?REIzdFNPUXZpcDhIOHFtcjdvY1dodnlsTEZXYVBlWGtPWkU1TVhEVDBuQStW?= =?utf-8?B?c0t0eUJDa3lZRFV6UzNXcS9YWE1NS2w2eFhEQWlENlVXNTJUUGxRMnhPL3dj?= =?utf-8?B?aFhJeGExUEhza1EyOVNiMlVOQkFuOWFTRGVmYjF1aEhCWGw0VXZLWGM3bFVm?= =?utf-8?B?b1JYNnh0RkRMcHZRQ0VuYXlOK2VqeGtkZ2haNkxrTXd3Um5Idm5RbmFMd1RH?= =?utf-8?B?VFFzb2V1RTNjaUQxL3NaK2ptYm5aekY5YzJZRFNVYkt0ZythQ0RlaThtQUV4?= =?utf-8?B?ZlJyVzl6b1NYOG8xNmVZYlByS2NMTXpCSWVHQzNNb3NoM0g0TlpEUUFveHFi?= =?utf-8?B?UnhSc3ZxQnVXMnpwNUI4eDVpYnd6VjZhYWt5Z0dUTXM2SFNzalRlSXNIOUJJ?= =?utf-8?B?UnBqaU5reTNYbWtrRTg3ZDVtTmxDQTgrWTI5L1R4STBVYndrL256Qy9wVWlG?= =?utf-8?B?UFlDVFlqWDRmb3c9PQ==?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0201MB1500;5:KtdMQBlwqbbh+0hyr6ib2bBYM1c8/BJnyPb8PE5aQZNZCAHqENkkzwJzqmT9iGNIIuecUgbfqx2d3t9rJtsdqzY2FwyQN3pqudUSd+2diKp+MdLslgObIq0WxJ+/qe/frVUYq2roFZhXn1QuMyEVhg==;24:A2Xf4nmVYUVB2LoKMD78angbTKtGI6KNTdKfZ+Jf07efPLhuULqVb9or8jt0MVDpqjqTVZjsa4yyP4FDBIx/WvPxmRjjq2L/gr68tU1/hVE=;20:WIm5KWsLWU+xzpJPOr/IboE03aOnu/n4n3AmPM4bTtcAgxYTD/uXiLaEDMOawXWV0WB7W8JtW/IvNIMhWZTiqw== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2015 22:38:07.6030 (UTC) X-MS-Exchange-CrossTenant-Id: fde4dada-be84-483f-92cc-e026cbee8e96 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=fde4dada-be84-483f-92cc-e026cbee8e96;Ip=[165.204.84.221];Helo=[atltwp01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0201MB1500 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5689 Lines: 134 On 08/18/2015 05:10 AM, Jiri Olsa wrote: > On Mon, Aug 17, 2015 at 09:06:59AM -0700, Andy Lutomirski wrote: >> On Sun, Aug 16, 2015 at 9:36 PM, Borislav Petkov wrote: >>> On Mon, Aug 17, 2015 at 12:29:56AM +0200, Jiri Olsa wrote: >>>> hi, >>>> 'perf test 18' is failing on systems with AMD processor. >>> Hmm, still using that b0rked test box? :-) >>> >>> Also, which kernel? >>> >>> There have been substantial changes to the entry code recently. Although >>> I don't see anything being done differently on AMD there except >>> X86_BUG_SYSRET_SS_ATTRS but that should be unrelated. >>> >>>> The only reason I could find is that AMD does not set 'resume flag' >>>> in RFLAGS register the way the Intel CPU does. >>>> >>>> (simplified) test scenario: >>>> >>>> - create breakpoint (on test_function) perf event with SIGIO signal >>>> to be delivered any time the breakpoint is hit >>>> - run test_function >>>> >>>> >>>> expected course of actions is: >>>> 1) CPU hits 'test_function' >>>> 2) DB exception is triggered, with RFLAGS.RF=0 >>>> 3) DB exception handler sets regs->RFLAGS.RF=1 and perf handler >>>> triggers irq_work pending work >>>> 4) DB exception executes iretd >>>> 5) irq_work interrupt is triggered, with RFLAGS.RF=1 >>>> 6) irq_work interrupt calls kill_fasync with SIGIO signal >>>> 7) irq_work interrupt on return to userspace calls prepare_exit_to_usermode >>>> which actually delivers the SIGIO signal >>>> 8) sigreturn syscall prepare registers to return to the >>>> instruction from step 1) and sets RFLAGS.RF to the its original >>>> value from step 5) (RFLAGS.RF=1) >>>> 9) CPU hits 'test_function' and DB exception is NOT triggered >>>> due to RFLAGS.RF=1 >>>> >>>> this is how I see it works on Intel >>>> >>>> But AMD gives me RFLAGS.RF=0 on step 5, which makes the step 9 to >>>> trigger the DB exception once again and makes the test fail. >>> Adding Andy, he might have an idea. Leaving in the rest for reference. >> Gee thanks :-p >> >> Jiri, did you instrument the code and observe do_IRQ sees RF clear in >> its pt_regs? Also, it might be worth checking that regs->ip in the >> irq_work matches regs->ip. > yep, thats what I saw.. once irq_work interrupt was triggered > the regs->ip was same as for the previous debug exception > but the RFLAGS.RF was 0 > >> It's *possible* that I messed up and broke RF restore with >> opportunistic sysret, but the code looks correct: >> >> testq $(X86_EFLAGS_RF|X86_EFLAGS_TF), %r11 >> jnz opportunistic_sysret_failed > AFAICS the problematic paths did not hit syscalls > > buuuuuut anyway, it looks like latest AMD firmware issue: > > [root@amd-pike-07 ~]# cat /sys/devices/system/cpu/cpu0/microcode/version > 0x6000822 > [root@amd-pike-07 perf]# ./perf test 18 > 18: Test breakpoint overflow signal handler : Ok > > [root@amd-pike-07 perf]# cat /sys/devices/system/cpu/cpu0/microcode/version > 0x6000832 > [root@amd-pike-07 perf]# ./perf test 18 > 18: Test breakpoint overflow signal handler : FAILED! > > > [root@amd-pike-07 ~]# cat /proc/cpuinfo > processor : 7 > vendor_id : AuthenticAMD > cpu family : 21 > model : 2 > model name : AMD Opteron(tm) Processor 3380 > stepping : 0 > microcode : 0x6000832 > > SNIP > > >>>> AMD description of RF flag (SDM 3.1.6): >>>> ======================================= >>>> Resume Flag (RF) Bit. Bit 16. The RF bit allows an instruction to be restarted following an >>>> instruction breakpoint resulting in a debug exception (#DB). This bit prevents multiple debug >>>> exceptions from occurring on the same instruction. >>>> The processor clears the RF bit after every instruction is successfully executed, except when the >>>> instruction is: >>>> • >>>> • >>>> An IRET that sets the RF bit. >>>> JMP, CALL, or INTn through a task gate. >>>> In both of the above cases, RF is not cleared to 0 until the next instruction successfully executes. >>>> When an exception occurs (or when a string instruction is interrupted), the processor normally sets >>>> RF=1 in the RFLAGS image saved on the interrupt stack. However, when a #DB exception occurs as a >>>> result of an instruction breakpoint, the processor clears the RF bit to 0 in the interrupt-stack RFLAGS >>>> image. >> That's a little weird, I think. Shouldn't RF be zero on #DB due to a >> *watchpoint* so that a watchpoint followed immediately by a breakpoint >> works? > the AMD description looked to be more vague (compared to Intels) > >>>> • For other cases, the value pushed for RF is the value that was in EFLAG.RF at the time the event handler was >>>> called. This includes: >>>> — Debug exceptions generated in response to instruction breakpoints >>>> — Hardware-generated interrupts arriving between instructions (including those arriving after the last >>>> iteration of a repeated string instruction) >> This appears to be why it works on Intel. Does AMD not do that? We >> could probably work around this in software (by not using irq work for >> this), but yuck. > yep, but hopefuly it's the issue microcode ;-) Cc-ing guys from linux-firmware git > > Sherry, Suravee, any idea? > > thanks, > jirka Jiri, I have duplicated your problem and asked the HW architect that wrote 832 to review the diff between the 822 and 832 microcode patch. Thanks, Sherry -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/