Add commentary about the new "asmlinkage_protect()" macro
[firefly-linux-kernel-4.4.55.git] / include / asm-x86 / linkage.h
index d605eeba0f700292f1373d36167c97e79a4ae006..c048353f4b8558f73b8939980c8de947a5fd0513 100644 (file)
  */
 #define asmregparm __attribute__((regparm(3)))
 
+/*
+ * Make sure the compiler doesn't do anything stupid with the
+ * arguments on the stack - they are owned by the *caller*, not
+ * the callee. This just fools gcc into not spilling into them,
+ * and keeps it from doing tailcall recursion and/or using the
+ * stack slots for temporaries, since they are live and "used"
+ * all the way to the end of the function.
+ *
+ * NOTE! On x86-64, all the arguments are in registers, so this
+ * only matters on a 32-bit kernel.
+ */
 #define asmlinkage_protect(n, ret, args...) \
        __asmlinkage_protect##n(ret, ##args)
 #define __asmlinkage_protect_n(ret, args...) \