Re: [PATCH net-next 5/5] net: sctp: fix incorrect type in gfp initializer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/11/2014 04:55 PM, David Laight wrote:
From: Daniel Borkmann
This fixes the following sparse warning:

   net/sctp/associola.c:1556:29: warning: incorrect type in initializer (different base types)
   net/sctp/associola.c:1556:29:    expected bool [unsigned] [usertype] preload
   net/sctp/associola.c:1556:29:    got restricted gfp_t
...
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -1591,7 +1591,7 @@ int sctp_assoc_lookup_laddr(struct sctp_association *asoc,
  /* Set an association id for a given association */
  int sctp_assoc_set_id(struct sctp_association *asoc, gfp_t gfp)
  {
-	bool preload = gfp & __GFP_WAIT;
+	bool preload = !!(gfp & __GFP_WAIT);
  	int ret;

  	/* If the id is already assigned, keep it. */
--

I was wondering if the compiler still manages to optimise this in a
manner that avoids actually calculating the boolean value...

So I disassembled the compilation I just did of the old code (gcc 4.7.3).
The object code looks strange.
I think that idr_preload_end() must be an empty inline function.

Cc'ing Tejun. ;-)

The compiler has duplicated the code between the two 'if (preload)'
clauses (to avoid the conditional test), and the failed to tail
merge everything in the latter stages.
I suspect that an empty '#define' would generate smaller code.

	David



--
To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Networking Development]     [Linux OMAP]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux