Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 108901
b: refs/heads/master
c: 75d9506
h: refs/heads/master
i:
  108899: 224f70f
v: v3
  • Loading branch information
Linus Torvalds committed Aug 20, 2008
1 parent 2ed7a4b commit f27c817
Show file tree
Hide file tree
Showing 155 changed files with 1,977 additions and 1,109 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1b04624f93bb1c4f9495b8476d1dd0200af019e2
refs/heads/master: 75d95062185c60356a423f7ab9e975b4293ec4f3
5 changes: 5 additions & 0 deletions trunk/Documentation/rfkill.txt
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,11 @@ This rule exists because users of the rfkill subsystem expect to get (and set,
when possible) the overall transmitter rfkill state, not of a particular rfkill
line.

5. During suspend, the rfkill class will attempt to soft-block the radio
through a call to rfkill->toggle_radio, and will try to restore its previous
state during resume. After a rfkill class is suspended, it will *not* call
rfkill->toggle_radio until it is resumed.

Example of a WLAN wireless driver connected to the rfkill subsystem:
--------------------------------------------------------------------

Expand Down
23 changes: 23 additions & 0 deletions trunk/Documentation/scsi/ChangeLog.megaraid_sas
Original file line number Diff line number Diff line change
@@ -1,3 +1,26 @@

1 Release Date : Thur.July. 24 11:41:51 PST 2008 -
(emaild-id:megaraidlinux@lsi.com)
Sumant Patro
Bo Yang

2 Current Version : 00.00.04.01
3 Older Version : 00.00.03.22

1. Add the new controller (0078, 0079) support to the driver
Those controllers are LSI's next generatation(gen2) SAS controllers.

1 Release Date : Mon.June. 23 10:12:45 PST 2008 -
(emaild-id:megaraidlinux@lsi.com)
Sumant Patro
Bo Yang

2 Current Version : 00.00.03.22
3 Older Version : 00.00.03.20

1. Add shutdown DCMD cmd to the shutdown routine to make FW shutdown proper.
2. Unexpected interrupt occurs in HWR Linux driver, add the dumy readl pci flush will fix this issue.

1 Release Date : Mon. March 10 11:02:31 PDT 2008 -
(emaild-id:megaraidlinux@lsi.com)
Sumant Patro
Expand Down
87 changes: 6 additions & 81 deletions trunk/MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -942,94 +942,19 @@ M: joern@lazybastard.org
L: linux-mtd@lists.infradead.org
S: Maintained

BLUETOOTH SUBSYSTEM
BLUETOOTH DRIVERS
P: Marcel Holtmann
M: marcel@holtmann.org
P: Maxim Krasnyansky
M: maxk@qualcomm.com
L: linux-bluetooth@vger.kernel.org
W: http://bluez.sf.net
W: http://www.bluez.org
W: http://www.holtmann.org/linux/bluetooth/
T: git kernel.org:/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6.git
S: Maintained

BLUETOOTH RFCOMM LAYER
P: Marcel Holtmann
M: marcel@holtmann.org
P: Maxim Krasnyansky
M: maxk@qualcomm.com
S: Maintained

BLUETOOTH BNEP LAYER
P: Marcel Holtmann
M: marcel@holtmann.org
P: Maxim Krasnyansky
M: maxk@qualcomm.com
S: Maintained

BLUETOOTH CMTP LAYER
P: Marcel Holtmann
M: marcel@holtmann.org
W: http://www.bluez.org/
S: Maintained

BLUETOOTH HIDP LAYER
P: Marcel Holtmann
M: marcel@holtmann.org
S: Maintained

BLUETOOTH HCI UART DRIVER
P: Marcel Holtmann
M: marcel@holtmann.org
P: Maxim Krasnyansky
M: maxk@qualcomm.com
S: Maintained

BLUETOOTH HCI USB DRIVER
P: Marcel Holtmann
M: marcel@holtmann.org
P: Maxim Krasnyansky
M: maxk@qualcomm.com
S: Maintained

BLUETOOTH HCI BCM203X DRIVER
P: Marcel Holtmann
M: marcel@holtmann.org
S: Maintained

BLUETOOTH HCI BPA10X DRIVER
P: Marcel Holtmann
M: marcel@holtmann.org
S: Maintained

BLUETOOTH HCI BFUSB DRIVER
P: Marcel Holtmann
M: marcel@holtmann.org
S: Maintained

BLUETOOTH HCI DTL1 DRIVER
P: Marcel Holtmann
M: marcel@holtmann.org
S: Maintained

BLUETOOTH HCI BLUECARD DRIVER
P: Marcel Holtmann
M: marcel@holtmann.org
S: Maintained

BLUETOOTH HCI BT3C DRIVER
P: Marcel Holtmann
M: marcel@holtmann.org
S: Maintained

BLUETOOTH HCI BTUART DRIVER
BLUETOOTH SUBSYSTEM
P: Marcel Holtmann
M: marcel@holtmann.org
S: Maintained

BLUETOOTH HCI VHCI DRIVER
P: Maxim Krasnyansky
M: maxk@qualcomm.com
L: linux-bluetooth@vger.kernel.org
W: http://www.bluez.org/
T: git kernel.org:/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6.git
S: Maintained

BONDING DRIVER
Expand Down
109 changes: 36 additions & 73 deletions trunk/arch/x86/kernel/cpu/cpufreq/powernow-k8.c
Original file line number Diff line number Diff line change
Expand Up @@ -737,63 +737,44 @@ static int find_psb_table(struct powernow_k8_data *data)
#ifdef CONFIG_X86_POWERNOW_K8_ACPI
static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index)
{
if (!data->acpi_data->state_count || (cpu_family == CPU_HW_PSTATE))
if (!data->acpi_data.state_count || (cpu_family == CPU_HW_PSTATE))
return;

data->irt = (data->acpi_data->states[index].control >> IRT_SHIFT) & IRT_MASK;
data->rvo = (data->acpi_data->states[index].control >> RVO_SHIFT) & RVO_MASK;
data->exttype = (data->acpi_data->states[index].control >> EXT_TYPE_SHIFT) & EXT_TYPE_MASK;
data->plllock = (data->acpi_data->states[index].control >> PLL_L_SHIFT) & PLL_L_MASK;
data->vidmvs = 1 << ((data->acpi_data->states[index].control >> MVS_SHIFT) & MVS_MASK);
data->vstable = (data->acpi_data->states[index].control >> VST_SHIFT) & VST_MASK;
}


static struct acpi_processor_performance *acpi_perf_data;
static int preregister_valid;

static int powernow_k8_cpu_preinit_acpi(void)
{
acpi_perf_data = alloc_percpu(struct acpi_processor_performance);
if (!acpi_perf_data)
return -ENODEV;

if (acpi_processor_preregister_performance(acpi_perf_data))
return -ENODEV;
else
preregister_valid = 1;
return 0;
data->irt = (data->acpi_data.states[index].control >> IRT_SHIFT) & IRT_MASK;
data->rvo = (data->acpi_data.states[index].control >> RVO_SHIFT) & RVO_MASK;
data->exttype = (data->acpi_data.states[index].control >> EXT_TYPE_SHIFT) & EXT_TYPE_MASK;
data->plllock = (data->acpi_data.states[index].control >> PLL_L_SHIFT) & PLL_L_MASK;
data->vidmvs = 1 << ((data->acpi_data.states[index].control >> MVS_SHIFT) & MVS_MASK);
data->vstable = (data->acpi_data.states[index].control >> VST_SHIFT) & VST_MASK;
}

static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
{
struct cpufreq_frequency_table *powernow_table;
int ret_val;
int cpu = 0;

data->acpi_data = percpu_ptr(acpi_perf_data, cpu);
if (acpi_processor_register_performance(data->acpi_data, data->cpu)) {
if (acpi_processor_register_performance(&data->acpi_data, data->cpu)) {
dprintk("register performance failed: bad ACPI data\n");
return -EIO;
}

/* verify the data contained in the ACPI structures */
if (data->acpi_data->state_count <= 1) {
if (data->acpi_data.state_count <= 1) {
dprintk("No ACPI P-States\n");
goto err_out;
}

if ((data->acpi_data->control_register.space_id != ACPI_ADR_SPACE_FIXED_HARDWARE) ||
(data->acpi_data->status_register.space_id != ACPI_ADR_SPACE_FIXED_HARDWARE)) {
if ((data->acpi_data.control_register.space_id != ACPI_ADR_SPACE_FIXED_HARDWARE) ||
(data->acpi_data.status_register.space_id != ACPI_ADR_SPACE_FIXED_HARDWARE)) {
dprintk("Invalid control/status registers (%x - %x)\n",
data->acpi_data->control_register.space_id,
data->acpi_data->status_register.space_id);
data->acpi_data.control_register.space_id,
data->acpi_data.status_register.space_id);
goto err_out;
}

/* fill in data->powernow_table */
powernow_table = kmalloc((sizeof(struct cpufreq_frequency_table)
* (data->acpi_data->state_count + 1)), GFP_KERNEL);
* (data->acpi_data.state_count + 1)), GFP_KERNEL);
if (!powernow_table) {
dprintk("powernow_table memory alloc failure\n");
goto err_out;
Expand All @@ -806,44 +787,29 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
if (ret_val)
goto err_out_mem;

powernow_table[data->acpi_data->state_count].frequency = CPUFREQ_TABLE_END;
powernow_table[data->acpi_data->state_count].index = 0;
powernow_table[data->acpi_data.state_count].frequency = CPUFREQ_TABLE_END;
powernow_table[data->acpi_data.state_count].index = 0;
data->powernow_table = powernow_table;

/* fill in data */
data->numps = data->acpi_data->state_count;
data->numps = data->acpi_data.state_count;
if (first_cpu(per_cpu(cpu_core_map, data->cpu)) == data->cpu)
print_basics(data);
powernow_k8_acpi_pst_values(data, 0);

/* notify BIOS that we exist */
acpi_processor_notify_smm(THIS_MODULE);

/* determine affinity, from ACPI if available */
if (preregister_valid) {
if ((data->acpi_data->shared_type == CPUFREQ_SHARED_TYPE_ALL) ||
(data->acpi_data->shared_type == CPUFREQ_SHARED_TYPE_ANY))
data->starting_core_affinity = data->acpi_data->shared_cpu_map;
else
data->starting_core_affinity = cpumask_of_cpu(data->cpu);
} else {
/* best guess from family if not */
if (cpu_family == CPU_HW_PSTATE)
data->starting_core_affinity = cpumask_of_cpu(data->cpu);
else
data->starting_core_affinity = per_cpu(cpu_core_map, data->cpu);
}

return 0;

err_out_mem:
kfree(powernow_table);

err_out:
acpi_processor_unregister_performance(data->acpi_data, data->cpu);
acpi_processor_unregister_performance(&data->acpi_data, data->cpu);

/* data->acpi_data.state_count informs us at ->exit() whether ACPI was used */
data->acpi_data->state_count = 0;
data->acpi_data.state_count = 0;

return -ENODEV;
}
Expand All @@ -855,10 +821,10 @@ static int fill_powernow_table_pstate(struct powernow_k8_data *data, struct cpuf
rdmsr(MSR_PSTATE_CUR_LIMIT, hi, lo);
data->max_hw_pstate = (hi & HW_PSTATE_MAX_MASK) >> HW_PSTATE_MAX_SHIFT;

for (i = 0; i < data->acpi_data->state_count; i++) {
for (i = 0; i < data->acpi_data.state_count; i++) {
u32 index;

index = data->acpi_data->states[i].control & HW_PSTATE_MASK;
index = data->acpi_data.states[i].control & HW_PSTATE_MASK;
if (index > data->max_hw_pstate) {
printk(KERN_ERR PFX "invalid pstate %d - bad value %d.\n", i, index);
printk(KERN_ERR PFX "Please report to BIOS manufacturer\n");
Expand All @@ -874,7 +840,7 @@ static int fill_powernow_table_pstate(struct powernow_k8_data *data, struct cpuf

powernow_table[i].index = index;

powernow_table[i].frequency = data->acpi_data->states[i].core_frequency * 1000;
powernow_table[i].frequency = data->acpi_data.states[i].core_frequency * 1000;
}
return 0;
}
Expand All @@ -883,16 +849,16 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data, struct cpuf
{
int i;
int cntlofreq = 0;
for (i = 0; i < data->acpi_data->state_count; i++) {
for (i = 0; i < data->acpi_data.state_count; i++) {
u32 fid;
u32 vid;

if (data->exttype) {
fid = data->acpi_data->states[i].status & EXT_FID_MASK;
vid = (data->acpi_data->states[i].status >> VID_SHIFT) & EXT_VID_MASK;
fid = data->acpi_data.states[i].status & EXT_FID_MASK;
vid = (data->acpi_data.states[i].status >> VID_SHIFT) & EXT_VID_MASK;
} else {
fid = data->acpi_data->states[i].control & FID_MASK;
vid = (data->acpi_data->states[i].control >> VID_SHIFT) & VID_MASK;
fid = data->acpi_data.states[i].control & FID_MASK;
vid = (data->acpi_data.states[i].control >> VID_SHIFT) & VID_MASK;
}

dprintk(" %d : fid 0x%x, vid 0x%x\n", i, fid, vid);
Expand Down Expand Up @@ -933,10 +899,10 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data, struct cpuf
cntlofreq = i;
}

if (powernow_table[i].frequency != (data->acpi_data->states[i].core_frequency * 1000)) {
if (powernow_table[i].frequency != (data->acpi_data.states[i].core_frequency * 1000)) {
printk(KERN_INFO PFX "invalid freq entries %u kHz vs. %u kHz\n",
powernow_table[i].frequency,
(unsigned int) (data->acpi_data->states[i].core_frequency * 1000));
(unsigned int) (data->acpi_data.states[i].core_frequency * 1000));
powernow_table[i].frequency = CPUFREQ_ENTRY_INVALID;
continue;
}
Expand All @@ -946,12 +912,11 @@ static int fill_powernow_table_fidvid(struct powernow_k8_data *data, struct cpuf

static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data)
{
if (data->acpi_data->state_count)
acpi_processor_unregister_performance(data->acpi_data, data->cpu);
if (data->acpi_data.state_count)
acpi_processor_unregister_performance(&data->acpi_data, data->cpu);
}

#else
static int powernow_k8_cpu_preinit_acpi(void) { return -ENODEV; }
static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) { return -ENODEV; }
static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data) { return; }
static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index) { return; }
Expand Down Expand Up @@ -1136,7 +1101,7 @@ static int powernowk8_verify(struct cpufreq_policy *pol)
static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol)
{
struct powernow_k8_data *data;
cpumask_t oldmask = CPU_MASK_ALL;
cpumask_t oldmask;
int rc;

if (!cpu_online(pol->cpu))
Expand Down Expand Up @@ -1209,7 +1174,10 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol)
/* run on any CPU again */
set_cpus_allowed_ptr(current, &oldmask);

pol->cpus = data->starting_core_affinity;
if (cpu_family == CPU_HW_PSTATE)
pol->cpus = cpumask_of_cpu(pol->cpu);
else
pol->cpus = per_cpu(cpu_core_map, pol->cpu);
data->available_cores = &(pol->cpus);

/* Take a crude guess here.
Expand Down Expand Up @@ -1332,7 +1300,6 @@ static int __cpuinit powernowk8_init(void)
}

if (supported_cpus == num_online_cpus()) {
powernow_k8_cpu_preinit_acpi();
printk(KERN_INFO PFX "Found %d %s "
"processors (%d cpu cores) (" VERSION ")\n",
num_online_nodes(),
Expand All @@ -1349,10 +1316,6 @@ static void __exit powernowk8_exit(void)
dprintk("exit\n");

cpufreq_unregister_driver(&cpufreq_amd64_driver);

#ifdef CONFIG_X86_POWERNOW_K8_ACPI
free_percpu(acpi_perf_data);
#endif
}

MODULE_AUTHOR("Paul Devriendt <paul.devriendt@amd.com> and Mark Langsdorf <mark.langsdorf@amd.com>");
Expand Down
3 changes: 1 addition & 2 deletions trunk/arch/x86/kernel/cpu/cpufreq/powernow-k8.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,12 @@ struct powernow_k8_data {
#ifdef CONFIG_X86_POWERNOW_K8_ACPI
/* the acpi table needs to be kept. it's only available if ACPI was
* used to determine valid frequency/vid/fid states */
struct acpi_processor_performance *acpi_data;
struct acpi_processor_performance acpi_data;
#endif
/* we need to keep track of associated cores, but let cpufreq
* handle hotplug events - so just point at cpufreq pol->cpus
* structure */
cpumask_t *available_cores;
cpumask_t starting_core_affinity;
};


Expand Down
Loading

0 comments on commit f27c817

Please sign in to comment.