aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/libertas
diff options
context:
space:
mode:
authorAnna Neal <anna@cozybit.com>2009-04-02 17:44:09 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-04-22 16:54:41 -0400
commitb26ed97c75e1538176c09f29c423a3f8a75868a7 (patch)
tree2a367af946b3cb45ea21d7eb7e5fbf013b137ac7 /drivers/net/wireless/libertas
parent25e47c18ac4d8ad09c2ed4b99c1dbbcb7e3d2c51 (diff)
libertas: increase spi driver thread priority
Currently, the libertas main thread contends with the spi driver thread in the TX path. To improve throughput, ensure that the driver thread has higher scheduling priority than the libertas main thread. Do this by making the libertas spi driver thread a low priority real time thread. We measured an average throughput improvement of 13%. Signed-off-by: Anna Neal <anna@cozybit.com> Signed-off-by: Andrey Yurovsky <andrey@cozybit.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/libertas')
-rw-r--r--drivers/net/wireless/libertas/if_spi.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/wireless/libertas/if_spi.c b/drivers/net/wireless/libertas/if_spi.c
index 07311e71af92..97493e2f4109 100644
--- a/drivers/net/wireless/libertas/if_spi.c
+++ b/drivers/net/wireless/libertas/if_spi.c
@@ -1020,6 +1020,7 @@ static int __devinit if_spi_probe(struct spi_device *spi)
1020 struct libertas_spi_platform_data *pdata = spi->dev.platform_data; 1020 struct libertas_spi_platform_data *pdata = spi->dev.platform_data;
1021 int err = 0; 1021 int err = 0;
1022 u32 scratch; 1022 u32 scratch;
1023 struct sched_param param = { .sched_priority = 1 };
1023 1024
1024 lbs_deb_enter(LBS_DEB_SPI); 1025 lbs_deb_enter(LBS_DEB_SPI);
1025 1026
@@ -1123,6 +1124,9 @@ static int __devinit if_spi_probe(struct spi_device *spi)
1123 lbs_pr_err("error creating SPI thread: err=%d\n", err); 1124 lbs_pr_err("error creating SPI thread: err=%d\n", err);
1124 goto remove_card; 1125 goto remove_card;
1125 } 1126 }
1127 if (sched_setscheduler(card->spi_thread, SCHED_FIFO, &param))
1128 lbs_pr_err("Error setting scheduler, using default.\n");
1129
1126 err = request_irq(spi->irq, if_spi_host_interrupt, 1130 err = request_irq(spi->irq, if_spi_host_interrupt,
1127 IRQF_TRIGGER_FALLING, "libertas_spi", card); 1131 IRQF_TRIGGER_FALLING, "libertas_spi", card);
1128 if (err) { 1132 if (err) {