[alsa-devel] [PATCH] ASoC: core: Convert single bit wide bitfields into bools
Trent Piepho
tpiepho at gmail.com
Wed Feb 8 20:52:49 CET 2012
On Wed, Feb 8, 2012 at 2:13 PM, Mark Brown
<broonie at opensource.wolfsonmicro.com> wrote:
> On Wed, Feb 08, 2012 at 02:08:05PM -0500, Trent Piepho wrote:
>> Aren't you increasing the size of some of these structs considerably?
>
> Hrm, possibly. I'd rather have hoped that the bool type would work a
> bit more sanely here.
Linux defines bool as _Bool, which is a native type from C99. _Bools
in structs appear to be the same as unsigned char. They each take one
byte and have an alignment of one.
So in this struct:
@@ -208,7 +208,7 @@ struct snd_soc_dai_driver {
/* DAI capabilities */
struct snd_soc_pcm_stream capture;
struct snd_soc_pcm_stream playback;
- unsigned int symmetric_rates:1;
+ bool symmetric_rates;
/* probe ordering - for components with runtime dependencies */
int probe_order;
Changing from a bitfield to a bool doesn't make any difference, since
both will consume 4 bytes as the int probe_order will need that for
alignment. Of course it might be possible to have less passing space
by placing the bool or bitfield near other < 4 bytes members.
This struct:
@@ -230,13 +230,13 @@ struct snd_soc_dai {
struct snd_soc_dai_driver *driver;
/* DAI runtime info */
- unsigned int capture_active:1; /* stream is in use */
- unsigned int playback_active:1; /* stream is in use */
- unsigned int symmetric_rates:1;
+ bool capture_active; /* stream is in use */
+ bool playback_active; /* stream is in use */
+ bool symmetric_rates;
struct snd_pcm_runtime *runtime;
unsigned int active;
- unsigned char pop_wait:1;
- unsigned char probed:1;
+ bool pop_wait;
+ bool probed;
Doesn't actually take more space either, 8 bytes total. But if it was
re-ordered so these bitfields were all together then bitfields with
take four bytes vs 8 for the bools.
This struct on the other hand:
@@ -488,16 +488,16 @@ struct snd_soc_dapm_widget {
unsigned int mask; /* non-shifted mask */
unsigned int on_val; /* on state value */
unsigned int off_val; /* off state value */
- unsigned char power:1; /* block power status */
- unsigned char invert:1; /* invert the power bit */
- unsigned char active:1; /* active stream on
DAC, ADC's */
- unsigned char connected:1; /* connected codec pin */
- unsigned char new:1; /* cnew complete */
- unsigned char ext:1; /* has external widgets */
- unsigned char force:1; /* force state */
- unsigned char ignore_suspend:1; /* kept enabled over suspend */
- unsigned char new_power:1; /* power from this run */
- unsigned char power_checked:1; /* power checked this run */
+ bool power; /* block power status */
+ bool invert; /* invert the power bit */
+ bool active; /* active stream on
DAC, ADC's */
+ bool connected; /* connected codec pin */
+ bool new; /* cnew complete */
+ bool ext; /* has external widgets */
+ bool force; /* force state */
+ bool ignore_suspend; /* kept enabled over suspend */
+ bool new_power; /* power from this run */
+ bool power_checked; /* power checked this run */
int subseq; /* sort within widget type */
It uses 12 bytes for bools and 4 for bitfields.
More information about the Alsa-devel
mailing list