Thread (24 messages) 24 messages, 8 authors, 2017-10-24

Re: [PATCH 3/4] powerpc/powernv: Enable TM without suspend if possible

From: Adhemerval Zanella <hidden>
Date: 2017-10-19 15:13:17


On 19/10/2017 11:34, Tulio Magno Quites Machado Filho wrote:
Forwarding some comments from Adhemerval sent to libc-alpha [1]...

Adhemerval Zanella [off-list ref] writes:
quoted
Florian Weimer [off-list ref] writes:
quoted
On 10/12/2017 12:17 PM, Michael Ellerman wrote:
quoted
+	pr_info("Enabling TM (Transactional Memory) with Suspend Disabled\n");
+	cur_cpu_spec->cpu_features |= CPU_FTR_TM;
+	cur_cpu_spec->cpu_user_features2 |= PPC_FEATURE2_HTM_NO_SUSPEND;
+	tm_suspend_disabled = true;
This doesn't look right because if suspend is not available, you need to 
clear the original PPC_FEATURE2_HTM flag because the semantics are not 
right, so that applications can use fallback code.  Otherwise, 
applications may incorrectly select the HTM code and break if running on 
a system which supports HTM, but without the suspend state.

The new flag should say that HTM is supported, but without the suspend 
state, and it should be always set if PPC_FEATURE2_HTM is set.
Will it also change TEXARS with the abort information?
It should, with a permanent error cause so that old applications entering
suspended state can adopt another technique.
Michael, could you clarify if this is indeed happening, please?
quoted
I completely agree with Florian here, this is as *ABI* change
and the kernel need to advertise a different TM ABI instead
of as an extension.
Adhemerval, could you elaborate which problems you're foreseeing, please?
Pretty much the same Florian already stated: an application can not any
more assume for instance:

        tsr. 	0
        mfcr	r9,128
        andis. 	r10,r9,0x4000
        be 	cr0,L(suspend)
	andis.	r10,r9,0x2000
	be	cr0,L(transactional)

However thinking more about it I am not sure if this should be really a
problem: on default HTM mode the program must handle self-induced failures
as the tbegin. failure path and I assume trying to suspend/resume in this
case will trigger this.  For instance:

   if (__builtin_tbegin (0))
     {
       /* some transactional stuff.  */
       __builtin_tsuspend ();
       /* non transactional stuff.  */
       __builtin_tresume ();
       /* more transactional stuff.  */
     }
   else
     {
       /* fall-out code.  */
     }

So I assume for these chips without suspend/resume support the example
code will always run the fall-out code.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help