Ask dispatch whether it requires serial mode.

	* retry.cc (gtm_thread::decide_begin_dispatch): Ask dispatch whether
	it requires serial mode instead of assuming that for certain
	dispatchs.
	* dispatch.h (abi_dispatch::requires_serial): New.
	(abi_dispatch::abi_dispatch): Adapt.
	* method-gl.cc (gl_wt_dispatch::gl_wt_dispatch): Adapt.
	* method-ml.cc (ml_wt_dispatch::ml_wt_dispatch): Same.
	* method-serial.cc (serialirr_dispatch::serialirr_dispatch,
	serial_dispatch::serial_dispatch,
	serialirr_onwrite_dispatch::serialirr_onwrite_dispatch): Same.

From-SVN: r192777
diff --git a/libitm/method-serial.cc b/libitm/method-serial.cc
index bdecd7b..09cfdd4 100644
--- a/libitm/method-serial.cc
+++ b/libitm/method-serial.cc
@@ -50,13 +50,15 @@
 class serialirr_dispatch : public abi_dispatch
 {
  public:
-  serialirr_dispatch() : abi_dispatch(false, true, true, false, &o_serial_mg)
+  serialirr_dispatch() : abi_dispatch(false, true, true, false,
+      gtm_thread::STATE_SERIAL | gtm_thread::STATE_IRREVOCABLE, &o_serial_mg)
   { }
 
  protected:
   serialirr_dispatch(bool ro, bool wt, bool uninstrumented,
-      bool closed_nesting, method_group* mg) :
-    abi_dispatch(ro, wt, uninstrumented, closed_nesting, mg) { }
+      bool closed_nesting, uint32_t requires_serial, method_group* mg) :
+    abi_dispatch(ro, wt, uninstrumented, closed_nesting, requires_serial, mg)
+  { }
 
   // Transactional loads and stores simply access memory directly.
   // These methods are static to avoid indirect calls, and will be used by the
@@ -151,7 +153,9 @@
   CREATE_DISPATCH_METHODS(virtual, )
   CREATE_DISPATCH_METHODS_MEM()
 
-  serial_dispatch() : abi_dispatch(false, true, false, true, &o_serial_mg) { }
+  serial_dispatch() : abi_dispatch(false, true, false, true,
+      gtm_thread::STATE_SERIAL, &o_serial_mg)
+  { }
 };
 
 
@@ -162,7 +166,7 @@
 {
  public:
   serialirr_onwrite_dispatch() :
-    serialirr_dispatch(false, true, false, false, &o_serial_mg) { }
+    serialirr_dispatch(false, true, false, false, 0, &o_serial_mg) { }
 
  protected:
   static void pre_write()