[PATCH 1/1] unify DMA_..BIT_MASK definitions: v3.1

Previous thread: [git] CFS-devel, group scheduler, fixes by Dmitry Adamushko on Tuesday, September 18, 2007 - 3:46 pm. (2 messages)

Next thread: Re: [git] CFS-devel, group scheduler, fixes by Dmitry Adamushko on Tuesday, September 18, 2007 - 3:56 pm. (2 messages)
To: <linux-kernel@...>, Andrew Morton <akpm@...>
Cc: Jeremy Fitzhardinge <jeremy@...>, Muli Ben-Yehuda <muli@...>, Satyam Sharma <satyam@...>, <amitkale@...>, <achim_leubner@...>
Date: Tuesday, September 18, 2007 - 3:46 pm

These patches remove redundant DMA_..BIT_MASK definitions across two
drivers. The computation of the majority of the bitmasks is done by the
compiler. The initial split of the patch touching each a different file got
removed due to possible git bisect breakage.

Andrew, can you please apply this patch for it touches drivers maintained by
different people and i there might be responsibility issues, imho.

Signed-off-by: Borislav Petkov <bbpetkov@yahoo.de>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Muli Ben-Yehuda <muli@il.ibm.com>

drivers/net/netxen/netxen_nic_main.c | 3 ---
drivers/scsi/gdth.c | 5 -----
include/linux/dma-mapping.h | 23 +++++++++++++----------
3 files changed, 13 insertions(+), 18 deletions(-)

--
Index: b/include/linux/dma-mapping.h
===================================================================
--- a/include/linux/dma-mapping.h 2007-09-18 21:12:30.000000000 +0200
+++ b/include/linux/dma-mapping.h 2007-09-18 21:13:17.000000000 +0200
@@ -13,16 +13,19 @@
DMA_NONE = 3,
};

-#define DMA_64BIT_MASK 0xffffffffffffffffULL
-#define DMA_48BIT_MASK 0x0000ffffffffffffULL
-#define DMA_40BIT_MASK 0x000000ffffffffffULL
-#define DMA_39BIT_MASK 0x0000007fffffffffULL
-#define DMA_32BIT_MASK 0x00000000ffffffffULL
-#define DMA_31BIT_MASK 0x000000007fffffffULL
-#define DMA_30BIT_MASK 0x000000003fffffffULL
-#define DMA_29BIT_MASK 0x000000001fffffffULL
-#define DMA_28BIT_MASK 0x000000000fffffffULL
-#define DMA_24BIT_MASK 0x0000000000ffffffULL
+#define DMA_BIT_MASK(n) ((1ULL<<(n))-1)
+
+#define DMA_64BIT_MASK (~0ULL)
+#define DMA_48BIT_MASK DMA_BIT_MASK(48)
+#define DMA_40BIT_MASK DMA_BIT_MASK(40)
+#define DMA_39BIT_MASK DMA_BIT_MASK(39)
+#define DMA_35BIT_MASK DMA_BIT_MASK(35)
+#define DMA_32BIT_MASK DMA_BIT_MASK(32)
+#define DMA_31BIT_MASK DMA_BIT_MASK(31)
+#define DMA_30BIT_MASK DMA_BIT_MASK(30)
+#define DMA_29BIT_MASK DMA_BIT_MASK(29)
+#define DMA_28BIT_MASK DMA_BIT_MASK(28)
+#define DMA_24BIT_M...

To: <bbpetkov@...>
Cc: <linux-kernel@...>, <jeremy@...>, <muli@...>, <satyam@...>, <amitkale@...>, <achim_leubner@...>
Date: Friday, October 5, 2007 - 3:47 pm

On Tue, 18 Sep 2007 21:46:47 +0200

Now that you've done this, those DMA_xxBIT_MASK macros are pointless and
stupid and we should aim to get rid of them.

From: Andrew Morton <akpm@linux-foundation.org>

Now that we have DMA_BIT_MASK(), these macros are pointless.

Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---

include/linux/dma-mapping.h | 6 ++++++
1 file changed, 6 insertions(+)

diff -puN include/linux/dma-mapping.h~a include/linux/dma-mapping.h
--- a/include/linux/dma-mapping.h~a
+++ a/include/linux/dma-mapping.h
@@ -15,6 +15,12 @@ enum dma_data_direction {

#define DMA_BIT_MASK(n) ((1ULL<<(n))-1)

+/*
+ * NOTE: do not use the below macros in new code and do not add new definitions
+ * here.
+ *
+ * Instead, just open-code DMA_BIT_MASK(n) within your driver
+ */
#define DMA_64BIT_MASK (~0ULL)
#define DMA_48BIT_MASK DMA_BIT_MASK(48)
#define DMA_47BIT_MASK DMA_BIT_MASK(47)
_

-

To: Andrew Morton <akpm@...>
Cc: <bbpetkov@...>, <linux-kernel@...>, <muli@...>, <satyam@...>, <amitkale@...>, <achim_leubner@...>
Date: Friday, October 5, 2007 - 4:43 pm

Except, unfortunately, DMA_64BIT_MASK. I guess we could special case
it, assuming this works in all the contexts the macro is used in (ie,
compile-time constant?):

#define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))

J
-

To: Jeremy Fitzhardinge <jeremy@...>
Cc: <bbpetkov@...>, <linux-kernel@...>, <muli@...>, <satyam@...>, <amitkale@...>, <achim_leubner@...>
Date: Friday, October 5, 2007 - 5:00 pm

On Fri, 05 Oct 2007 13:43:54 -0700

doh. Thanks.

--- a/include/linux/dma-mapping.h~stop-using-dma_xxbit_mask-fix
+++ a/include/linux/dma-mapping.h
@@ -13,7 +13,7 @@ enum dma_data_direction {
DMA_NONE = 3,
};

-#define DMA_BIT_MASK(n) ((1ULL<<(n))-1)
+#define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))

/*
* NOTE: do not use the below macros in new code and do not add new definitions
@@ -21,7 +21,7 @@ enum dma_data_direction {
*
* Instead, just open-code DMA_BIT_MASK(n) within your driver
*/
-#define DMA_64BIT_MASK (~0ULL)
+#define DMA_64BIT_MASK DMA_BIT_MASK(64)
#define DMA_48BIT_MASK DMA_BIT_MASK(48)
#define DMA_47BIT_MASK DMA_BIT_MASK(47)
#define DMA_40BIT_MASK DMA_BIT_MASK(40)
_

it's irksome that there doesn't seem to be a neater way of doing
this, until they give us unsigned long long longs.
-

To: Andrew Morton <akpm@...>
Cc: Jeremy Fitzhardinge <jeremy@...>, <linux-kernel@...>, <muli@...>, <satyam@...>, <amitkale@...>, <achim_leubner@...>
Date: Saturday, October 6, 2007 - 4:37 am

Hi and sorry for the late reply. IMHO, this solution is the most concise and still
clear enough a macro to understand what it does after a quick scan (unlike
uglies like IO_COND() in lib/iomap.c¹, :)) And, as a next step, we probably
should do

perl -pi -e 's/DMA_(..)BIT_MASK/DMA_BIT_MASK($1)/g' *

after removing the #define DMA_..BIT_MASK defines in /include/linux/dma-mapping.h
and the other two headers in the original patch after the x86 merge.
Current git (9f34073b4e54ad58541e0e2b4a87f4f6c1460e21) contains about 394
instances of usage of those macros, including the #definitions.

¹ this is not a flame!
--
Regards/Gruß,
Boris.
-

To: Andrew Morton <akpm@...>
Cc: Jeremy Fitzhardinge <jeremy@...>, <bbpetkov@...>, <linux-kernel@...>, <muli@...>, <satyam@...>, <amitkale@...>, <achim_leubner@...>
Date: Friday, October 5, 2007 - 5:03 pm

or you could take advantage of the macros in kernel.h and write that
as:

+#define DMA_BIT_MASK(n) (((n) == 64) ? ULLONG_MAX : ((1ULL<<(n))-1))

rday
--
========================================================================
Robert P. J. Day
Linux Consulting, Training and Annoying Kernel Pedantry
Waterloo, Ontario, CANADA

http://crashcourse.ca
========================================================================
-

To: Robert P. J. Day <rpjday@...>
Cc: Andrew Morton <akpm@...>, Jeremy Fitzhardinge <jeremy@...>, <bbpetkov@...>, <linux-kernel@...>, <muli@...>, <satyam@...>, <amitkale@...>, <achim_leubner@...>
Date: Friday, October 5, 2007 - 5:24 pm

#define DMA_BIT_MASK(n) ((u64)-1 >> (64 - (n)))

Andreas.

--
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
-

To: Andreas Schwab <schwab@...>
Cc: Robert P. J. Day <rpjday@...>, Andrew Morton <akpm@...>, <bbpetkov@...>, <linux-kernel@...>, <muli@...>, <satyam@...>, <amitkale@...>, <achim_leubner@...>
Date: Friday, October 5, 2007 - 5:28 pm

Yeah, that's cleaner.

J
-

To: Jeremy Fitzhardinge <jeremy@...>
Cc: <schwab@...>, <rpjday@...>, <bbpetkov@...>, <linux-kernel@...>, <muli@...>, <satyam@...>, <amitkale@...>, <achim_leubner@...>
Date: Friday, October 5, 2007 - 6:24 pm

On Fri, 05 Oct 2007 14:28:45 -0700

Well yes, but DMA_BIT_MASK(0) invokes undefined behaviour, generates a
compiler warning and evaluates to 0xffffffffffffffff (with my setup).

That won't be a problem in practice, but it is strictly wrong and doesn't set
a good exmaple for the children ;)

-

To: Andrew Morton <akpm@...>
Cc: <schwab@...>, <rpjday@...>, <bbpetkov@...>, <linux-kernel@...>, <muli@...>, <satyam@...>, <amitkale@...>, <achim_leubner@...>
Date: Friday, October 5, 2007 - 6:32 pm

It's interesting that it doesn't seem to be possible to define this
without invoking some undefined behaviour. But a device that supports 0
bits of DMA address probably isn't terribly concerned about this - it's
certainly better than making 64 bit masks warty.

J
-

To: Robert P. J. Day <rpjday@...>
Cc: Andrew Morton <akpm@...>, <bbpetkov@...>, <linux-kernel@...>, <muli@...>, <satyam@...>, <amitkale@...>, <achim_leubner@...>
Date: Friday, October 5, 2007 - 5:23 pm

But that's a more indirect way of expressing "I want all 1's".

J
-

To: Jeremy Fitzhardinge <jeremy@...>
Cc: Robert P. J. Day <rpjday@...>, Andrew Morton <akpm@...>, <linux-kernel@...>, <muli@...>, <satyam@...>, <amitkale@...>, <achim_leubner@...>
Date: Saturday, October 6, 2007 - 3:54 am

... and ULLONG_MAX _is_ (~0ULL).

--
Regards/Gruß,
Boris.
-

To: Borislav Petkov <bbpetkov@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>, Andrew Morton <akpm@...>, Jeremy Fitzhardinge <jeremy@...>, Muli Ben-Yehuda <muli@...>, <amitkale@...>, <achim_leubner@...>
Date: Wednesday, September 19, 2007 - 11:03 am

Thanks, Borislav.

Reviewed-by: Satyam Sharma <satyam@infradead.org>
-

Previous thread: [git] CFS-devel, group scheduler, fixes by Dmitry Adamushko on Tuesday, September 18, 2007 - 3:46 pm. (2 messages)

Next thread: Re: [git] CFS-devel, group scheduler, fixes by Dmitry Adamushko on Tuesday, September 18, 2007 - 3:56 pm. (2 messages)