From: Manish Lachwani <mlachwani@mvista.com>
To: linux-mips@linux-mips.org
Cc: ralf@linux-mips.org
Subject: [PATCH] 2.4: Preemption fixes for Broadcom DMA Page operations
Date: Wed, 1 Dec 2004 16:33:08 -0800 [thread overview]
Message-ID: <20041202003308.GA13085@prometheus.mvista.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 148 bytes --]
Hello !
The attached patch implements preempt_disable/preempt_enable around the SB1 DMA
page operations. Please review ...
Thanks
Manish Lachwani
[-- Attachment #2: patch-bcm91125-dma --]
[-- Type: text/plain, Size: 3258 bytes --]
--- arch/mips/mm/pg-sb1.c.orig 2004-12-01 10:59:53.000000000 -0800
+++ arch/mips/mm/pg-sb1.c 2004-12-01 11:08:59.000000000 -0800
@@ -157,7 +157,11 @@
void sb1_dma_init(void)
{
- int cpu = smp_processor_id();
+ int cpu;
+
+ preempt_disable();
+
+ cpu = smp_processor_id();
uint64_t base_val = PHYSADDR(&page_descr[cpu]) | V_DM_DSCR_BASE_RINGSZ(1);
out64(base_val,
@@ -166,15 +170,23 @@
IO_SPACE_BASE + A_DM_REGISTER(cpu, R_DM_DSCR_BASE));
out64(base_val | M_DM_DSCR_BASE_ENABL,
IO_SPACE_BASE + A_DM_REGISTER(cpu, R_DM_DSCR_BASE));
+
+ preempt_enable();
}
void sb1_clear_page_dma(void *page)
{
- int cpu = smp_processor_id();
+ int cpu;
+
+ preempt_disable();
+
+ cpu = smp_processor_id();
/* if the page is above Kseg0, use old way */
- if (KSEGX(page) != K0BASE)
+ if (KSEGX(page) != K0BASE) {
+ preempt_enable();
return sb1_clear_page(page);
+ }
page_descr[cpu].dscr_a = PHYSADDR(page) | M_DM_DSCRA_ZERO_MEM | M_DM_DSCRA_L2C_DEST | M_DM_DSCRA_INTERRUPT;
page_descr[cpu].dscr_b = V_DM_DSCRB_SRC_LENGTH(PAGE_SIZE);
@@ -187,17 +199,27 @@
while (!(in64(IO_SPACE_BASE + A_DM_REGISTER(cpu, R_DM_DSCR_BASE_DEBUG)) & M_DM_DSCR_BASE_INTERRUPT))
;
in64(IO_SPACE_BASE + A_DM_REGISTER(cpu, R_DM_DSCR_BASE));
+
+ preempt_enable();
}
void sb1_copy_page_dma(void *to, void *from)
{
- unsigned long from_phys = PHYSADDR(from);
- unsigned long to_phys = PHYSADDR(to);
- int cpu = smp_processor_id();
+ unsigned long from_phys;
+ unsigned long to_phys;
+ int cpu;
+
+ preempt_disable();
+
+ from_phys = PHYSADDR(from);
+ to_phys = PHYSADDR(to);
+ cpu = smp_processor_id();
/* if either page is above Kseg0, use old way */
- if ((KSEGX(to) != K0BASE) || (KSEGX(from) != K0BASE))
+ if ((KSEGX(to) != K0BASE) || (KSEGX(from) != K0BASE)) {
+ preempt_enable();
return sb1_copy_page(to, from);
+ }
page_descr[cpu].dscr_a = PHYSADDR(to_phys) | M_DM_DSCRA_L2C_DEST | M_DM_DSCRA_INTERRUPT;
page_descr[cpu].dscr_b = PHYSADDR(from_phys) | V_DM_DSCRB_SRC_LENGTH(PAGE_SIZE);
@@ -210,6 +232,8 @@
while (!(in64(IO_SPACE_BASE + A_DM_REGISTER(cpu, R_DM_DSCR_BASE_DEBUG)) & M_DM_DSCR_BASE_INTERRUPT))
;
in64(IO_SPACE_BASE + A_DM_REGISTER(cpu, R_DM_DSCR_BASE));
+
+ preempt_enable();
}
#endif
--- drivers/char/Config.in.orig 2004-12-01 10:33:59.000000000 -0800
+++ drivers/char/Config.in 2004-12-01 10:34:22.000000000 -0800
@@ -178,7 +178,7 @@
define_bool CONFIG_AU1X00_USB_DEVICE y
fi
fi
- if [ "$CONFIG_SIBYTE_SB1250" = "y" ]; then
+ if [ "$CONFIG_SIBYTE_BOARD" = "y" ]; then
bool ' Support for sb1250 onchip DUART' CONFIG_SIBYTE_SB1250_DUART
if [ "$CONFIG_SIBYTE_SB1250_DUART" = "y" ]; then
bool ' Console on SB1250 DUART' CONFIG_SIBYTE_SB1250_DUART_CONSOLE
--- drivers/net/Config.in.orig 2004-12-01 10:41:37.000000000 -0800
+++ drivers/net/Config.in 2004-12-01 10:41:46.000000000 -0800
@@ -104,7 +104,7 @@
if [ "$CONFIG_IDT_79EB434" = "y" ]; then
bool ' IDT RC32434 Ethernet support' CONFIG_IDT_RC32434_ETH
fi
- if [ "$CONFIG_SIBYTE_SB1250" = "y" ]; then
+ if [ "$CONFIG_SIBYTE_BOARD" = "y" ]; then
tristate ' SB1250 Ethernet support' CONFIG_NET_SB1250_MAC
fi
if [ "$CONFIG_SGI_IP27" = "y" ]; then
next reply other threads:[~2004-12-02 0:33 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-02 0:33 Manish Lachwani [this message]
2004-12-02 0:49 ` [PATCH] 2.4: Preemption fixes for Broadcom DMA Page operations Ralf Baechle
2004-12-02 0:52 ` Maciej W. Rozycki
2004-12-02 0:58 ` Manish Lachwani
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20041202003308.GA13085@prometheus.mvista.com \
--to=mlachwani@mvista.com \
--cc=linux-mips@linux-mips.org \
--cc=ralf@linux-mips.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox