/***************************************************************************** * * Copyright (C) 2008 Cedric Bregardis and * Jean-Christian Hassler * * This file is part of the Audiowerk2 ALSA driver * * The Audiowerk2 ALSA driver is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2. * * The Audiowerk2 ALSA driver is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the Audiowerk2 ALSA driver; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * *****************************************************************************/ #ifndef AW2_SAA7146_H #define AW2_SAA7146_H #define NB_STREAM_PLAYBACK 2 #define NB_STREAM_CAPTURE 1 #define NUM_STREAM_PLAYBACK_ANA 0 #define NUM_STREAM_PLAYBACK_DIG 1 #define NUM_STREAM_CAPTURE_ANA 0 typedef void (*snd_aw2_saa7146_it_cb) (void *); struct snd_aw2_saa7146_cb_param { snd_aw2_saa7146_it_cb p_it_callback; void *p_callback_param; }; /* definition of the chip-specific record */ struct snd_aw2_saa7146 { void __iomem *base_addr; }; extern void snd_aw2_saa7146_setup(struct snd_aw2_saa7146 *chip, void __iomem *pci_base_addr); extern int snd_aw2_saa7146_free(struct snd_aw2_saa7146 *chip); extern void snd_aw2_saa7146_pcm_init_playback(struct snd_aw2_saa7146 *chip, int stream_number, unsigned long dma_addr, unsigned long period_size, unsigned long buffer_size); extern void snd_aw2_saa7146_pcm_init_capture(struct snd_aw2_saa7146 *chip, int stream_number, unsigned long dma_addr, unsigned long period_size, unsigned long buffer_size); extern void snd_aw2_saa7146_define_it_playback_callback(unsigned int stream_number, snd_aw2_saa7146_it_cb p_it_callback, void *p_callback_param); extern void snd_aw2_saa7146_define_it_capture_callback(unsigned int stream_number, snd_aw2_saa7146_it_cb p_it_callback, void *p_callback_param); extern void snd_aw2_saa7146_pcm_trigger_start_capture(struct snd_aw2_saa7146 *chip, int stream_number); extern void snd_aw2_saa7146_pcm_trigger_stop_capture(struct snd_aw2_saa7146 *chip, int stream_number); extern void snd_aw2_saa7146_pcm_trigger_start_playback(struct snd_aw2_saa7146 *chip, int stream_number); extern void snd_aw2_saa7146_pcm_trigger_stop_playback(struct snd_aw2_saa7146 *chip, int stream_number); extern irqreturn_t snd_aw2_saa7146_interrupt(int irq, void *dev_id); extern unsigned int snd_aw2_saa7146_get_hw_ptr_playback(struct snd_aw2_saa7146 *chip, int stream_number, unsigned char *start_addr, unsigned int buffer_size); extern unsigned int snd_aw2_saa7146_get_hw_ptr_capture(struct snd_aw2_saa7146 *chip, int stream_number, unsigned char *start_addr, unsigned int buffer_size); extern void snd_aw2_saa7146_use_digital_input(struct snd_aw2_saa7146 *chip, int use_digital); extern int snd_aw2_saa7146_is_using_digital_input(struct snd_aw2_saa7146 *chip); #endif change='this.form.submit();'>space:mode:
authorThomas Gleixner <tglx@linutronix.de>2017-01-31 23:58:38 +0100
committerIngo Molnar <mingo@kernel.org>2017-02-01 08:37:27 +0100
commitdd86e373e09fb16b83e8adf5c48c421a4ca76468 (patch)
tree55703c2ea8584e303e342090614e0aab3509ab21 /tools/perf/tests/is_printable_array.c
parent0b3589be9b98994ce3d5aeca52445d1f5627c4ba (diff)
perf/x86/intel/rapl: Make package handling more robust
The package management code in RAPL relies on package mapping being available before a CPU is started. This changed with: 9d85eb9119f4 ("x86/smpboot: Make logical package management more robust") because the ACPI/BIOS information turned out to be unreliable, but that left RAPL in broken state. This was not noticed because on a regular boot all CPUs are online before RAPL is initialized. A possible fix would be to reintroduce the mess which allocates a package data structure in CPU prepare and when it turns out to already exist in starting throw it away later in the CPU online callback. But that's a horrible hack and not required at all because RAPL becomes functional for perf only in the CPU online callback. That's correct because user space is not yet informed about the CPU being onlined, so nothing caan rely on RAPL being available on that particular CPU. Move the allocation to the CPU online callback and simplify the hotplug handling. At this point the package mapping is established and correct. This also adds a missing check for available package data in the event_init() function. Reported-by: Yasuaki Ishimatsu <yasu.isimatu@gmail.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Sebastian Siewior <bigeasy@linutronix.de> Cc: Stephane Eranian <eranian@google.com> Cc: Vince Weaver <vincent.weaver@maine.edu> Fixes: 9d85eb9119f4 ("x86/smpboot: Make logical package management more robust") Link: http://lkml.kernel.org/r/20170131230141.212593966@linutronix.de Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/tests/is_printable_array.c')