[질문] SMP 모드에서 Driver 작성할 때 고려해야 할 점???

skjean의 이미지

SMP 모드로 동작하는 Linux에서 돌아갈 디바이스 드라이버를

작성할 때, 특별히 고려해야 하는 점이 있나요?

질문이 좀 구체적이지는 못하지만.. SMP에 대해서는 별로

아는게 없어서요...

실제 CPU 하나에서 돌아가는 Linux 상에서 잘 동작하는 디바이스

드라이버가 SMP 상에서는 다음과 같은 에러를 내면서 죽어버립니다.

도움 부탁드립니다.
(참고로 네트워크 드라이버인데.. insmod 이후 ifconfig로 IP 주소
설정하면서 나타난 메시지입니다.


Unhandled kernel unaligned access in unaligned.c::emulate_load_store_insn, line 483:
$0 : 00000000 80315d60 c3529544 ffffffed c352c01c 00001043 00000001 8ff6fe68
$8 : 00000001 7fff7e18 00000000 00000000 10438a50 8234c448 8234c450 00000003
$16: c352cfa0 00000000 00001043 c352cfa0 80117f60 c352cfa0 8ff6fe78 7fff7c20
$24: 00000000 2ac18ab0                   8ff6e000 8ff6fde8 00008914 c352957c
Hi : 00000000
Lo : 00000e80
epc  : c3529574    Tainted: PF
Status: 30001f03
Cause : 80800010
Process ifconfig (pid: 143, stackpage=8ff6e000)
Stack:    8025a39c 8025a370 802f84b0 80125df8 c352cfa0 00000000 00001043
 00000000 8ff78f30 80219b58 8021cbc0 80258820 8ff6fe68 00000000 c352cfa0
 00001002 8021bb94 8021bb64 c352cfa0 802589f0 8ff6fe68 802199d8 8ff6fe68
 8d33ec20 00000000 00000000 80259428 802591e4 8560e018 00000003 8ff6fe90
 802199d8 65686966 65000000 00000000 00000000 10438a50 00000003 10008a50
 7fff7e18 ...
Call Trace:   [<8025a39c>] [<8025a370>] [<80125df8>] [<c352cfa0>] [<80219b58>]
 [<8021cbc0>] [<80258820>] [<c352cfa0>] [<8021bb94>] [<8021bb64>] [<c352cfa0>]
 [<802589f0>] [<802199d8>] [<80259428>] [<802591e4>] [<802199d8>] [<8025c714>]
 [<80211850>] [<80143ca4>] [<80159c00>] [<80212028>] [<8010aa94>] [<801183ec>]

Code: 26947f60  3c04c353  2484c01c <0280f809> 8cb10068  8e230004  8e720020  8e24000c
 24630001
Segmentation fault 

hb_kim의 이미지

spinlock 을 잘 쓰셔야 됩니다.

SMP 가 아닌 경우는 전역변수를 액세스할때 lock 을 주의해서 사용하지 않아도 문제가 발견되지 않고 넘어가는 경우가 많습니다. 범용 디바이스 드라이버를 개발/테스트하시려면 듀얼 CPU 시스템을 꼭 갖춰야 하죠.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.