Revision d26d45253b78ec0a67003eea25bd08fceaa5b78c authored by Linus Torvalds on 22 January 2013, 18:30:49 UTC, committed by Linus Torvalds on 22 January 2013, 18:30:49 UTC
Pull ftrace fix from Steven Rostedt: "Kprobes now uses the function tracer if it can. That is, if a probe is placed on a function mcount/nop location, and the arch supports it, instead of adding a breakpoint, kprobes will register a function callback as that is much more efficient. The function tracer requires to update modules before they run, and uses the module notifier to do so. But if something else in the module notifiers registers a kprobe at one of these locations, before ftrace can get to it, then the system could fail. The function tracer must be initialized early, otherwise module notifiers that probe will only work by chance." * tag 'trace-3.8-rc4-fix' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: ftrace: Be first to run code modification on modules
sb.h
#define DSP_RESET (devc->base + 0x6)
#define DSP_READ (devc->base + 0xA)
#define DSP_WRITE (devc->base + 0xC)
#define DSP_COMMAND (devc->base + 0xC)
#define DSP_STATUS (devc->base + 0xC)
#define DSP_DATA_AVAIL (devc->base + 0xE)
#define DSP_DATA_AVL16 (devc->base + 0xF)
#define MIXER_ADDR (devc->base + 0x4)
#define MIXER_DATA (devc->base + 0x5)
#define OPL3_LEFT (devc->base + 0x0)
#define OPL3_RIGHT (devc->base + 0x2)
#define OPL3_BOTH (devc->base + 0x8)
/* DSP Commands */
#define DSP_CMD_SPKON 0xD1
#define DSP_CMD_SPKOFF 0xD3
#define DSP_CMD_DMAON 0xD0
#define DSP_CMD_DMAOFF 0xD4
#define IMODE_NONE 0
#define IMODE_OUTPUT PCM_ENABLE_OUTPUT
#define IMODE_INPUT PCM_ENABLE_INPUT
#define IMODE_INIT 3
#define IMODE_MIDI 4
#define NORMAL_MIDI 0
#define UART_MIDI 1
/*
* Device models
*/
#define MDL_NONE 0
#define MDL_SB1 1 /* SB1.0 or 1.5 */
#define MDL_SB2 2 /* SB2.0 */
#define MDL_SB201 3 /* SB2.01 */
#define MDL_SBPRO 4 /* SB Pro */
#define MDL_SB16 5 /* SB16/32/AWE */
#define MDL_SBPNP 6 /* SB16/32/AWE PnP */
#define MDL_JAZZ 10 /* Media Vision Jazz16 */
#define MDL_SMW 11 /* Logitech SoundMan Wave (Jazz16) */
#define MDL_ESS 12 /* ESS ES688 and ES1688 */
#define MDL_AZTECH 13 /* Aztech Sound Galaxy family */
#define MDL_ES1868MIDI 14 /* MIDI port of ESS1868 */
#define MDL_AEDSP 15 /* Audio Excel DSP 16 */
#define MDL_ESSPCI 16 /* ESS PCI card */
#define MDL_YMPCI 17 /* Yamaha PCI sb in emulation */
#define SUBMDL_ALS007 42 /* ALS-007 differs from SB16 only in mixer */
/* register assignment */
#define SUBMDL_ALS100 43 /* ALS-100 allows sampling rates of up */
/* to 48kHz */
/*
* Config flags
*/
#define SB_NO_MIDI 0x00000001
#define SB_NO_MIXER 0x00000002
#define SB_NO_AUDIO 0x00000004
#define SB_NO_RECORDING 0x00000008 /* No audio recording */
#define SB_MIDI_ONLY (SB_NO_AUDIO|SB_NO_MIXER)
#define SB_PCI_IRQ 0x00000010 /* PCI shared IRQ */
struct mixer_def {
unsigned int regno: 8;
unsigned int bitoffs:4;
unsigned int nbits:4;
};
typedef struct mixer_def mixer_tab[32][2];
typedef struct mixer_def mixer_ent;
struct sb_module_options
{
int esstype; /* ESS chip type */
int acer; /* Do acer notebook init? */
int sm_games; /* Logitech soundman games? */
};
typedef struct sb_devc {
int dev;
/* Hardware parameters */
int *osp;
int minor, major;
int type;
int model, submodel;
int caps;
# define SBCAP_STEREO 0x00000001
# define SBCAP_16BITS 0x00000002
/* Hardware resources */
int base;
int irq;
int dma8, dma16;
int pcibase; /* For ESS Maestro etc */
/* State variables */
int opened;
/* new audio fields for full duplex support */
int fullduplex;
int duplex;
int speed, bits, channels;
volatile int irq_ok;
volatile int intr_active, irq_mode;
/* duplicate audio fields for full duplex support */
volatile int intr_active_16, irq_mode_16;
/* Mixer fields */
int *levels;
mixer_tab *iomap;
size_t iomap_sz; /* number or records in the iomap table */
int mixer_caps, recmask, outmask, supported_devices;
int supported_rec_devices, supported_out_devices;
int my_mixerdev;
int sbmixnum;
/* Audio fields */
unsigned long trg_buf;
int trigger_bits;
int trg_bytes;
int trg_intrflag;
int trg_restart;
/* duplicate audio fields for full duplex support */
unsigned long trg_buf_16;
int trigger_bits_16;
int trg_bytes_16;
int trg_intrflag_16;
int trg_restart_16;
unsigned char tconst;
/* MIDI fields */
int my_mididev;
int input_opened;
int midi_broken;
void (*midi_input_intr) (int dev, unsigned char data);
void *midi_irq_cookie; /* IRQ cookie for the midi */
spinlock_t lock;
struct sb_module_options sbmo; /* Module options */
} sb_devc;
/*
* PCI card types
*/
#define SB_PCI_ESSMAESTRO 1 /* ESS Maestro Legacy */
#define SB_PCI_YAMAHA 2 /* Yamaha Legacy */
/*
* Functions
*/
int sb_dsp_command (sb_devc *devc, unsigned char val);
int sb_dsp_get_byte(sb_devc * devc);
int sb_dsp_reset (sb_devc *devc);
void sb_setmixer (sb_devc *devc, unsigned int port, unsigned int value);
unsigned int sb_getmixer (sb_devc *devc, unsigned int port);
int sb_dsp_detect (struct address_info *hw_config, int pci, int pciio, struct sb_module_options *sbmo);
int sb_dsp_init (struct address_info *hw_config, struct module *owner);
void sb_dsp_unload(struct address_info *hw_config, int sbmpu);
int sb_mixer_init(sb_devc *devc, struct module *owner);
void sb_mixer_unload(sb_devc *devc);
void sb_mixer_set_stereo (sb_devc *devc, int mode);
void smw_mixer_init(sb_devc *devc);
void sb_dsp_midi_init (sb_devc *devc, struct module *owner);
void sb_audio_init (sb_devc *devc, char *name, struct module *owner);
void sb_midi_interrupt (sb_devc *devc);
void sb_chgmixer (sb_devc * devc, unsigned int reg, unsigned int mask, unsigned int val);
int sb_common_mixer_set(sb_devc * devc, int dev, int left, int right);
int sb_audio_open(int dev, int mode);
void sb_audio_close(int dev);
/* From sb_common.c */
void sb_dsp_disable_midi(int port);
int probe_sbmpu (struct address_info *hw_config, struct module *owner);
void unload_sbmpu (struct address_info *hw_config);
void unload_sb16(struct address_info *hw_info);
void unload_sb16midi(struct address_info *hw_info);
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...