Skip to content

Commit

Permalink
ALSA: pcm: Build pcm notifier code conditionally
Browse files Browse the repository at this point in the history
The PCM notifier code is used only by OSS emulation layer, so we can
build it conditionally for reducing the size.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
tiwai committed May 17, 2017
1 parent 239480a commit 58f30d6
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 20 deletions.
15 changes: 8 additions & 7 deletions include/sound/pcm.h
Original file line number Diff line number Diff line change
Expand Up @@ -531,13 +531,6 @@ struct snd_pcm {
#endif
};

struct snd_pcm_notify {
int (*n_register) (struct snd_pcm * pcm);
int (*n_disconnect) (struct snd_pcm * pcm);
int (*n_unregister) (struct snd_pcm * pcm);
struct list_head list;
};

/*
* Registering
*/
Expand All @@ -552,7 +545,15 @@ int snd_pcm_new_internal(struct snd_card *card, const char *id, int device,
struct snd_pcm **rpcm);
int snd_pcm_new_stream(struct snd_pcm *pcm, int stream, int substream_count);

#if IS_ENABLED(CONFIG_SND_PCM_OSS)
struct snd_pcm_notify {
int (*n_register) (struct snd_pcm * pcm);
int (*n_disconnect) (struct snd_pcm * pcm);
int (*n_unregister) (struct snd_pcm * pcm);
struct list_head list;
};
int snd_pcm_notify(struct snd_pcm_notify *notify, int nfree);
#endif

/*
* Native I/O
Expand Down
33 changes: 20 additions & 13 deletions sound/core/pcm.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,10 @@ MODULE_DESCRIPTION("Midlevel PCM code for ALSA.");
MODULE_LICENSE("GPL");

static LIST_HEAD(snd_pcm_devices);
static LIST_HEAD(snd_pcm_notify_list);
static DEFINE_MUTEX(register_mutex);
#if IS_ENABLED(CONFIG_SND_PCM_OSS)
static LIST_HEAD(snd_pcm_notify_list);
#endif

static int snd_pcm_free(struct snd_pcm *pcm);
static int snd_pcm_dev_free(struct snd_device *device);
Expand Down Expand Up @@ -884,16 +886,23 @@ static void snd_pcm_free_stream(struct snd_pcm_str * pstr)
put_device(&pstr->dev);
}

#if IS_ENABLED(CONFIG_SND_PCM_OSS)
#define pcm_call_notify(pcm, call) \
do { \
struct snd_pcm_notify *_notify; \
list_for_each_entry(_notify, &snd_pcm_notify_list, list) \
_notify->call(pcm); \
} while (0)
#else
#define pcm_call_notify(pcm, call) /* NOP */
#endif

static int snd_pcm_free(struct snd_pcm *pcm)
{
struct snd_pcm_notify *notify;

if (!pcm)
return 0;
if (!pcm->internal) {
list_for_each_entry(notify, &snd_pcm_notify_list, list)
notify->n_unregister(pcm);
}
if (!pcm->internal)
pcm_call_notify(pcm, n_unregister);
if (pcm->private_free)
pcm->private_free(pcm);
snd_pcm_lib_preallocate_free_for_all(pcm);
Expand Down Expand Up @@ -1069,7 +1078,6 @@ static int snd_pcm_dev_register(struct snd_device *device)
{
int cidx, err;
struct snd_pcm_substream *substream;
struct snd_pcm_notify *notify;
struct snd_pcm *pcm;

if (snd_BUG_ON(!device || !device->device_data))
Expand Down Expand Up @@ -1107,8 +1115,7 @@ static int snd_pcm_dev_register(struct snd_device *device)
snd_pcm_timer_init(substream);
}

list_for_each_entry(notify, &snd_pcm_notify_list, list)
notify->n_register(pcm);
pcm_call_notify(pcm, n_register);

unlock:
mutex_unlock(&register_mutex);
Expand All @@ -1118,7 +1125,6 @@ static int snd_pcm_dev_register(struct snd_device *device)
static int snd_pcm_dev_disconnect(struct snd_device *device)
{
struct snd_pcm *pcm = device->device_data;
struct snd_pcm_notify *notify;
struct snd_pcm_substream *substream;
int cidx;

Expand All @@ -1138,8 +1144,7 @@ static int snd_pcm_dev_disconnect(struct snd_device *device)
}
}
if (!pcm->internal) {
list_for_each_entry(notify, &snd_pcm_notify_list, list)
notify->n_disconnect(pcm);
pcm_call_notify(pcm, n_disconnect);
}
for (cidx = 0; cidx < 2; cidx++) {
if (!pcm->internal)
Expand All @@ -1151,6 +1156,7 @@ static int snd_pcm_dev_disconnect(struct snd_device *device)
return 0;
}

#if IS_ENABLED(CONFIG_SND_PCM_OSS)
/**
* snd_pcm_notify - Add/remove the notify list
* @notify: PCM notify list
Expand Down Expand Up @@ -1183,6 +1189,7 @@ int snd_pcm_notify(struct snd_pcm_notify *notify, int nfree)
return 0;
}
EXPORT_SYMBOL(snd_pcm_notify);
#endif /* CONFIG_SND_PCM_OSS */

#ifdef CONFIG_SND_PROC_FS
/*
Expand Down

0 comments on commit 58f30d6

Please sign in to comment.