리눅스 드라이버, UP 환경에선 정상작동, SMP 환경에서는 패닉

jenix의 이미지

안녕하세요..

UP 환경에선 정상작동하던 커널 드라이버가 있습니다.

근데 이 드라이버가 SMP 환경에서는 중간에 패닉을 일으키네요.

하드웨어로 데이터를 암호화할 수 있는 암호화 가속 디바이스인데요,

SMP 환경에서 갑자기 데이터 량이 확 증가하면 패닉을 일으킵니다..

커널 패닉 메시지에서 call trace 어드레스를 보면 메모리 할당/ 해제 하다가 죽는데,,

이게 UP 환경에선 전혀 그런 일이 없거든요;; ㅠㅠ

어디를 집중적으로 봐야할지 막막합니다..

직접 제작한 드라이버는 아니고, 벤더로 부터 받은 드라이버인데.. 지원이 안되서 --; 직접 고쳐야할 것 같네요.

드라이버구조는 케릭터 디바이스를 사용하고 커널 스레드를 이용하여 폴링 방식으로 이루어져 있습니다.

pci 인터페이스구요.

커널 옵션에서 irq cpu 밸런싱 맞춰주는 옵션을 켰는데, cat /proc/interrupt 시에 이쪽저쪽 cpu에 irq 가 분산되길래

혹시 이거때문일까(-ㅅ-)하고 이 옵션을 끄고 테스트하니 한쪽 cpu 에서 몰려서 irq 가 발생하는데도, 패닉이 역시 동일하게 나타나구요.

커널은 2.4.26 기반입니다. 특별히 커널에 대해 수정을 가한 사항은 없구요.

커널에서 SMP 옵션을 끄고 UP 환경에서 드라이버를 사용하면 정말 아무 문제가 없습니다.

CPU 가 2개만 되면 이러네요.

경험있으신 고수님들, 어느 부분을 중점적으로 살펴봐야할지 조언좀 부탁드릴게요 ㅠ_ㅠ

prether의 이미지

driver가 SMP-safe하게 개발되었는지
확인을 해보세요~

/***************************************
Being the one is just like being in love.
***************************************/

jenix의 이미지

앗.. 질문이 그래서.. 드라이버가 smp-safe 한거 같지가 않아서
소스코드를 살펴볼때 어디를 집중적으로 살펴봐야할지 질문을 한건데 ^^;;

개인적으로 드는 생각은;; 의심가는 부분에 전부 락을 걸어버린다 -_-;; 인데..
이렇게 하는게 맞는 방향인지..

---------------------------------------------------------------------------
http://jinhyung.org -- 방문해 보세요!! Jenix 의 블로그입니다! :D

---------------------------------------------------------------------------
http://jinhyung.org -- 방문해 보세요!! Jenix 의 블로그입니다! :D

cwryu의 이미지

스케줄은 안 되는 코드에서 (UP에서 정상 동작한다니) 동시에 억세스되면 안 된다 싶은 데이터 등 race condition이 발생한다 싶은 곳을 찾아야죠. "그게 뭐냐?"고 물으신다면.. 정답이 없고 어떻게 동작하는 지 이해하지 않고는 특별한 왕도는 없네요.

시간이 부족하다면 다 스핀락을 거는 것도 방법이죠.

----
익명이나 오래전 글에 리플은 무조건 -1

freemckang의 이미지

제가 아는 분이면 고생이 많으시군요... ^^;;

句日新, 日新 日新 又日新.

句日新, 日新 日新 又日新.

freemckang의 이미지

제가 아는 분이면 고생이 많으시군요... ^^;;

句日新, 日新 日新 又日新.

句日新, 日新 日新 又日新.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.