[ALSA] Fix Oops at rmmod with CONFIG_SND_VERBOSE_PROCFS=n
Fixed Oops at rmmod with CONFIG_SND_VERBOSE_PROCFS=n. Add ifdef to struct fields for optimization and better compile checks. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
61fb63c096
commit
b7d90a356a
6 changed files with 20 additions and 12 deletions
|
@ -374,12 +374,14 @@ struct snd_pcm_substream {
|
||||||
/* -- OSS things -- */
|
/* -- OSS things -- */
|
||||||
struct snd_pcm_oss_substream oss;
|
struct snd_pcm_oss_substream oss;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_SND_VERBOSE_PROCFS
|
||||||
struct snd_info_entry *proc_root;
|
struct snd_info_entry *proc_root;
|
||||||
struct snd_info_entry *proc_info_entry;
|
struct snd_info_entry *proc_info_entry;
|
||||||
struct snd_info_entry *proc_hw_params_entry;
|
struct snd_info_entry *proc_hw_params_entry;
|
||||||
struct snd_info_entry *proc_sw_params_entry;
|
struct snd_info_entry *proc_sw_params_entry;
|
||||||
struct snd_info_entry *proc_status_entry;
|
struct snd_info_entry *proc_status_entry;
|
||||||
struct snd_info_entry *proc_prealloc_entry;
|
struct snd_info_entry *proc_prealloc_entry;
|
||||||
|
#endif
|
||||||
/* misc flags */
|
/* misc flags */
|
||||||
unsigned int no_mmap_ctrl: 1;
|
unsigned int no_mmap_ctrl: 1;
|
||||||
unsigned int hw_opened: 1;
|
unsigned int hw_opened: 1;
|
||||||
|
@ -400,12 +402,14 @@ struct snd_pcm_str {
|
||||||
struct snd_pcm_oss_stream oss;
|
struct snd_pcm_oss_stream oss;
|
||||||
#endif
|
#endif
|
||||||
struct snd_pcm_file *files;
|
struct snd_pcm_file *files;
|
||||||
|
#ifdef CONFIG_SND_VERBOSE_PROCFS
|
||||||
struct snd_info_entry *proc_root;
|
struct snd_info_entry *proc_root;
|
||||||
struct snd_info_entry *proc_info_entry;
|
struct snd_info_entry *proc_info_entry;
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
|
||||||
unsigned int xrun_debug; /* 0 = disabled, 1 = verbose, 2 = stacktrace */
|
unsigned int xrun_debug; /* 0 = disabled, 1 = verbose, 2 = stacktrace */
|
||||||
struct snd_info_entry *proc_xrun_debug_entry;
|
struct snd_info_entry *proc_xrun_debug_entry;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
struct snd_pcm {
|
struct snd_pcm {
|
||||||
|
|
|
@ -75,7 +75,9 @@ struct snd_pcm_oss_substream {
|
||||||
struct snd_pcm_oss_stream {
|
struct snd_pcm_oss_stream {
|
||||||
struct snd_pcm_oss_setup *setup_list; /* setup list */
|
struct snd_pcm_oss_setup *setup_list; /* setup list */
|
||||||
struct mutex setup_mutex;
|
struct mutex setup_mutex;
|
||||||
|
#ifdef CONFIG_SND_VERBOSE_PROCFS
|
||||||
struct snd_info_entry *proc_entry;
|
struct snd_info_entry *proc_entry;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
struct snd_pcm_oss {
|
struct snd_pcm_oss {
|
||||||
|
|
|
@ -142,7 +142,7 @@ config SND_SUPPORT_OLD_API
|
||||||
|
|
||||||
config SND_VERBOSE_PROCFS
|
config SND_VERBOSE_PROCFS
|
||||||
bool "Verbose procfs contents"
|
bool "Verbose procfs contents"
|
||||||
depends on SND
|
depends on SND && PROC_FS
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Say Y here to include code for verbose procfs contents (provides
|
Say Y here to include code for verbose procfs contents (provides
|
||||||
|
@ -175,7 +175,7 @@ config SND_DEBUG_DETECT
|
||||||
config SND_PCM_XRUN_DEBUG
|
config SND_PCM_XRUN_DEBUG
|
||||||
bool "Enable PCM ring buffer overrun/underrun debugging"
|
bool "Enable PCM ring buffer overrun/underrun debugging"
|
||||||
default n
|
default n
|
||||||
depends on SND_DEBUG
|
depends on SND_DEBUG && SND_VERBOSE_PROCFS
|
||||||
help
|
help
|
||||||
Say Y to enable the PCM ring buffer overrun/underrun debugging.
|
Say Y to enable the PCM ring buffer overrun/underrun debugging.
|
||||||
It is usually not required, but if you have trouble with
|
It is usually not required, but if you have trouble with
|
||||||
|
|
|
@ -2214,7 +2214,7 @@ static int snd_pcm_oss_mmap(struct file *file, struct vm_area_struct *area)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_SND_VERBOSE_PROCFS
|
||||||
/*
|
/*
|
||||||
* /proc interface
|
* /proc interface
|
||||||
*/
|
*/
|
||||||
|
@ -2368,10 +2368,10 @@ static void snd_pcm_oss_proc_done(struct snd_pcm *pcm)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else /* !CONFIG_PROC_FS */
|
#else /* !CONFIG_SND_VERBOSE_PROCFS */
|
||||||
#define snd_pcm_oss_proc_init(pcm)
|
#define snd_pcm_oss_proc_init(pcm)
|
||||||
#define snd_pcm_oss_proc_done(pcm)
|
#define snd_pcm_oss_proc_done(pcm)
|
||||||
#endif /* CONFIG_PROC_FS */
|
#endif /* CONFIG_SND_VERBOSE_PROCFS */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ENTRY functions
|
* ENTRY functions
|
||||||
|
|
|
@ -142,7 +142,7 @@ static int snd_pcm_control_ioctl(struct snd_card *card,
|
||||||
return -ENOIOCTLCMD;
|
return -ENOIOCTLCMD;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_PROC_FS) && defined(CONFIG_SND_VERBOSE_PROCFS)
|
#ifdef CONFIG_SND_VERBOSE_PROCFS
|
||||||
|
|
||||||
#define STATE(v) [SNDRV_PCM_STATE_##v] = #v
|
#define STATE(v) [SNDRV_PCM_STATE_##v] = #v
|
||||||
#define STREAM(v) [SNDRV_PCM_STREAM_##v] = #v
|
#define STREAM(v) [SNDRV_PCM_STREAM_##v] = #v
|
||||||
|
@ -599,12 +599,12 @@ static int snd_pcm_substream_proc_done(struct snd_pcm_substream *substream)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#else /* !CONFIG_PROC_FS */
|
#else /* !CONFIG_SND_VERBOSE_PROCFS */
|
||||||
static inline int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr) { return 0; }
|
static inline int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr) { return 0; }
|
||||||
static inline int snd_pcm_stream_proc_done(struct snd_pcm_str *pstr) { return 0; }
|
static inline int snd_pcm_stream_proc_done(struct snd_pcm_str *pstr) { return 0; }
|
||||||
static inline int snd_pcm_substream_proc_init(struct snd_pcm_substream *substream) { return 0; }
|
static inline int snd_pcm_substream_proc_init(struct snd_pcm_substream *substream) { return 0; }
|
||||||
static inline int snd_pcm_substream_proc_done(struct snd_pcm_substream *substream) { return 0; }
|
static inline int snd_pcm_substream_proc_done(struct snd_pcm_substream *substream) { return 0; }
|
||||||
#endif /* CONFIG_PROC_FS */
|
#endif /* CONFIG_SND_VERBOSE_PROCFS */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* snd_pcm_new_stream - create a new PCM stream
|
* snd_pcm_new_stream - create a new PCM stream
|
||||||
|
|
|
@ -100,8 +100,10 @@ static void snd_pcm_lib_preallocate_dma_free(struct snd_pcm_substream *substream
|
||||||
int snd_pcm_lib_preallocate_free(struct snd_pcm_substream *substream)
|
int snd_pcm_lib_preallocate_free(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
snd_pcm_lib_preallocate_dma_free(substream);
|
snd_pcm_lib_preallocate_dma_free(substream);
|
||||||
|
#ifdef CONFIG_SND_VERBOSE_PROCFS
|
||||||
snd_info_unregister(substream->proc_prealloc_entry);
|
snd_info_unregister(substream->proc_prealloc_entry);
|
||||||
substream->proc_prealloc_entry = NULL;
|
substream->proc_prealloc_entry = NULL;
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +126,7 @@ int snd_pcm_lib_preallocate_free_for_all(struct snd_pcm *pcm)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_SND_VERBOSE_PROCFS
|
||||||
/*
|
/*
|
||||||
* read callback for prealloc proc file
|
* read callback for prealloc proc file
|
||||||
*
|
*
|
||||||
|
@ -203,9 +205,9 @@ static inline void preallocate_info_init(struct snd_pcm_substream *substream)
|
||||||
substream->proc_prealloc_entry = entry;
|
substream->proc_prealloc_entry = entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* !CONFIG_PROC_FS */
|
#else /* !CONFIG_SND_VERBOSE_PROCFS */
|
||||||
#define preallocate_info_init(s)
|
#define preallocate_info_init(s)
|
||||||
#endif
|
#endif /* CONFIG_SND_VERBOSE_PROCFS */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* pre-allocate the buffer and create a proc file for the substream
|
* pre-allocate the buffer and create a proc file for the substream
|
||||||
|
|
Loading…
Reference in a new issue