diff --git a/Documentation/translations/ko_KR/memory-barriers.txt b/Documentation/translations/ko_KR/memory-barriers.txt index aeb0e58ec7ce2003d53cd1a72ddf3e17fa97447b..6ae6d24ba60e4cfeb21ef925a5ec562db44058f2 100644 --- a/Documentation/translations/ko_KR/memory-barriers.txt +++ b/Documentation/translations/ko_KR/memory-barriers.txt @@ -2480,75 +2480,83 @@ I/O 액세스를 통한 ì£¼ë³€ìž¥ì¹˜ì™€ì˜ í†µì‹ ì€ ì•„í‚¤í…ì³ì™€ ê¸°ê¸°ì— (*) readX(), writeX(): - readX() 와 writeX() MMIO 액세스 함수는 ì ‘ê·¼ë˜ëŠ” ì£¼ë³€ìž¥ì¹˜ë¡œì˜ í¬ì¸í„°ë¥¼ - __iomem * 패러미터로 받습니다. ë””í´íŠ¸ I/O 기능으로 매핑ë˜ëŠ” í¬ì¸í„° (예: - ioremap() 으로 반환ë˜ëŠ” 것) ì˜ ìˆœì„œ ë³´ìž¥ì€ ë‹¤ìŒê³¼ 같습니다: - - 1. ê°™ì€ ì£¼ë³€ìž¥ì¹˜ë¡œì˜ ëª¨ë“ readX() 와 writeX() 액세스는 ê°ìžì— 대해 - 순서지어집니다. 예를 들어, CPU ì˜ íŠ¹ì • 디바ì´ìŠ¤ë¡œì˜ MMIO ë ˆì§€ìŠ¤í„° - 쓰기는 프로그램 순서대로 ë„ì°©í• ê²ƒì´ ë³´ìž¥ë©ë‹ˆë‹¤. - - 2. CPU ì— ì˜í•œ íŠ¹ì • ì£¼ë³€ìž¥ì¹˜ë¡œì˜ writeX() 는 ëª¨ë“ ì•žì„ CPU ì˜ ë©”ëª¨ë¦¬ - 쓰기가 완료ë˜ê¸°ë¥¼ ë¨¼ì € 기다립니다. 예를 들어, dma_alloc_coherent() 를 - 통해 í• ë‹¹ëœ ì „ì†¡ìš© DMA 버í¼ë¡œì˜ CPU ì˜ ì“°ê¸°ëŠ” ì´ ì „ì†¡ì„ ì‹œìž‘ì‹œí‚¤ê¸° 위해 - CPU ê°€ MMIO 컨트롤 ë ˆì§€ìŠ¤í„°ì— ì“°ê¸°ë¥¼ í• ë•Œ DMA ì—”ì§„ì— ë³´ì¼ ê²ƒì´ - 보장ë©ë‹ˆë‹¤. - - 3. CPU ì— ì˜í•œ ì£¼ë³€ìž¥ì¹˜ë¡œì˜ readX() 는 ëª¨ë“ ë’¤ë”°ë¥´ëŠ” CPU ì˜ ë©”ëª¨ë¦¬ - ì½ê¸°ê°€ 시작ë˜ê¸° ì „ì— ì™„ë£Œë©ë‹ˆë‹¤. 예를 들어, dma_alloc_coherent() 를 - 통해 í• ë‹¹ëœ ìˆ˜ì‹ ìš© DMA 버í¼ë¡œë¶€í„°ì˜ CPU ì˜ ì½ê¸°ëŠ” ì´ DMA ìˆ˜ì‹ ì˜ ì™„ë£Œë¥¼ - 표시하는 DMA ì—”ì§„ì˜ MMIO ìƒíƒœ ë ˆì§€ìŠ¤í„° ì½ê¸° 후ì—는 ì˜¤ì—¼ëœ ë°ì´í„°ë¥¼ ì½ì§€ - ì•Šì„ ê²ƒì´ ë³´ìž¥ë©ë‹ˆë‹¤. - - 4. CPU ì— ì˜í•œ ì£¼ë³€ìž¥ì¹˜ë¡œì˜ readX() 는 ëª¨ë“ ë’¤ë”°ë¥´ëŠ” delay() 루프가 ìˆ˜í–‰ì„ - 시작하기 ì „ì— ì™„ë£Œë©ë‹ˆë‹¤. 예를 들어, CPU ì˜ íŠ¹ì • ì£¼ë³€ìž¥ì¹˜ë¡œì˜ ë‘ê°œì˜ - MMIO ë ˆì§€ìŠ¤í„° 쓰기가 í–‰í•´ì§€ëŠ”ë° ì²«ë²ˆì§¸ 쓰기가 readX() 를 통해 곧바로 - ì½ì–´ì¡Œê³ ì´ì–´ ë‘번째 writeX() ì „ì— udelay(1) ì´ í˜¸ì¶œë˜ì—ˆë‹¤ë©´ ì´ ë‘ê°œì˜ - 쓰기는 최소 1us ì˜ ê°„ê²©ì„ ë‘ê³ í–‰í•´ì§ˆ ê²ƒì´ ë³´ìž¥ë©ë‹ˆë‹¤. - - ë””í´íŠ¸ê°€ ì•„ë‹Œ ê¸°ëŠ¥ì„ í†µí•´ 얻어지는 __iomem í¬ì¸í„° (예: ioremap_wc() 를 - 통해 리턴ë˜ëŠ” 것) 는 ì´ëŸ° 보장사í•ë“¤ 중 다수를 ì œê³µí•˜ì§€ ì•Šì„ ìˆ˜ 있습니다. + readX() 와 writeX() MMIO 액세스 함수는 ì ‘ê·¼ë˜ëŠ” ì£¼ë³€ìž¥ì¹˜ë¡œì˜ í¬ì¸í„°ë¥¼ + __iomem * 패러미터로 받습니다. ë””í´íŠ¸ I/O 기능으로 매핑ë˜ëŠ” í¬ì¸í„° + (예: ioremap() 으로 반환ë˜ëŠ” 것) ì˜ ìˆœì„œ ë³´ìž¥ì€ ë‹¤ìŒê³¼ 같습니다: + + 1. ê°™ì€ ì£¼ë³€ìž¥ì¹˜ë¡œì˜ ëª¨ë“ readX() 와 writeX() 액세스는 ê°ìžì— 대해 + 순서지어집니다. 예를 들어, CPU ì˜ íŠ¹ì • 디바ì´ìŠ¤ë¡œì˜ MMIO ë ˆì§€ìŠ¤í„° + 쓰기는 프로그램 순서대로 ë„ì°©í• ê²ƒì´ ë³´ìž¥ë©ë‹ˆë‹¤. + + 2. CPU ì— ì˜í•œ íŠ¹ì • ì£¼ë³€ìž¥ì¹˜ë¡œì˜ writeX() 는 ëª¨ë“ ì•žì„ CPU ì˜ ë©”ëª¨ë¦¬ + 쓰기가 완료ë˜ê¸°ë¥¼ ë¨¼ì € 기다립니다. 예를 들어, dma_alloc_coherent() + 를 통해 í• ë‹¹ëœ ì „ì†¡ìš© DMA 버í¼ë¡œì˜ CPU ì˜ ì“°ê¸°ëŠ” ì´ ì „ì†¡ì„ + 시작시키기 위해 CPU ê°€ MMIO 컨트롤 ë ˆì§€ìŠ¤í„°ì— ì“°ê¸°ë¥¼ í• ë•Œ DMA + ì—”ì§„ì— ë³´ì¼ ê²ƒì´ ë³´ìž¥ë©ë‹ˆë‹¤. + + 3. CPU ì— ì˜í•œ ì£¼ë³€ìž¥ì¹˜ë¡œì˜ readX() 는 ëª¨ë“ ë’¤ë”°ë¥´ëŠ” CPU ì˜ ë©”ëª¨ë¦¬ + ì½ê¸°ê°€ 시작ë˜ê¸° ì „ì— ì™„ë£Œë©ë‹ˆë‹¤. 예를 들어, dma_alloc_coherent() 를 + 통해 í• ë‹¹ëœ ìˆ˜ì‹ ìš© DMA 버í¼ë¡œë¶€í„°ì˜ CPU ì˜ ì½ê¸°ëŠ” ì´ DMA ìˆ˜ì‹ ì˜ + 완료를 표시하는 DMA ì—”ì§„ì˜ MMIO ìƒíƒœ ë ˆì§€ìŠ¤í„° ì½ê¸° 후ì—는 ì˜¤ì—¼ëœ + ë°ì´í„°ë¥¼ ì½ì§€ ì•Šì„ ê²ƒì´ ë³´ìž¥ë©ë‹ˆë‹¤. + + 4. CPU ì— ì˜í•œ ì£¼ë³€ìž¥ì¹˜ë¡œì˜ readX() 는 ëª¨ë“ ë’¤ë”°ë¥´ëŠ” delay() 루프가 + ìˆ˜í–‰ì„ ì‹œìž‘í•˜ê¸° ì „ì— ì™„ë£Œë©ë‹ˆë‹¤. 예를 들어, CPU ì˜ íŠ¹ì • + ì£¼ë³€ìž¥ì¹˜ë¡œì˜ ë‘ê°œì˜ MMIO ë ˆì§€ìŠ¤í„° 쓰기가 í–‰í•´ì§€ëŠ”ë° ì²«ë²ˆì§¸ 쓰기가 + readX() 를 통해 곧바로 ì½ì–´ì¡Œê³ ì´ì–´ ë‘번째 writeX() ì „ì— udelay(1) + ì´ í˜¸ì¶œë˜ì—ˆë‹¤ë©´ ì´ ë‘ê°œì˜ ì“°ê¸°ëŠ” 최소 1us ì˜ ê°„ê²©ì„ ë‘ê³ í–‰í•´ì§ˆ ê²ƒì´ + 보장ë©ë‹ˆë‹¤: + + writel(42, DEVICE_REGISTER_0); // 디바ì´ìŠ¤ì— ë„착함... + readl(DEVICE_REGISTER_0); + udelay(1); + writel(42, DEVICE_REGISTER_1); // ...ì´ê²ƒë³´ë‹¤ 최소 1us ì „ì—. + + ë””í´íŠ¸ê°€ ì•„ë‹Œ ê¸°ëŠ¥ì„ í†µí•´ 얻어지는 __iomem í¬ì¸í„° (예: ioremap_wc() 를 + 통해 리턴ë˜ëŠ” 것) ì˜ ìˆœì„œ ì†ì„±ì€ ì‹¤ì œ 아키í…ì³ì— ì˜ì¡´ì ì´ì–´ì„œ ì´ëŸ° + ì¢…ë¥˜ì˜ ë§¤í•‘ìœ¼ë¡œì˜ ì•¡ì„¸ìŠ¤ëŠ” ì•žì„œ ì„¤ëª…ëœ ë³´ìž¥ì‚¬í•ì— ì˜ì¡´í• 수 없습니다. (*) readX_relaxed(), writeX_relaxed() - ì´ê²ƒë“¤ì€ readX() 와 writeX() ëž‘ 비슷하지만, ë” ì™„í™”ëœ ë©”ëª¨ë¦¬ 순서 ë³´ìž¥ì„ - ì œê³µí•©ë‹ˆë‹¤. 구체ì 으로, ì´ê²ƒë“¤ì€ ì¼ë°˜ì 메모리 액세스나 delay() 루프 - (예:ì•žì˜ 2-4 í•ëª©) ì— ëŒ€í•´ 순서를 보장하지 않습니다만 ë””í´íŠ¸ I/O 기능으로 - ë§¤í•‘ëœ __iomem í¬ì¸í„°ì— 대해 ë™ìž‘í• ë•Œ ê°™ì€ ì£¼ë³€ìž¥ì¹˜ë¡œì˜ ì•¡ì„¸ìŠ¤ì—는 순서가 - 맞춰질 ê²ƒì´ ë³´ìž¥ë©ë‹ˆë‹¤. + ì´ê²ƒë“¤ì€ readX() 와 writeX() ëž‘ 비슷하지만, ë” ì™„í™”ëœ ë©”ëª¨ë¦¬ 순서 + ë³´ìž¥ì„ ì œê³µí•©ë‹ˆë‹¤. 구체ì 으로, ì´ê²ƒë“¤ì€ ì¼ë°˜ì 메모리 액세스나 delay() + 루프 (예:ì•žì˜ 2-4 í•ëª©) ì— ëŒ€í•´ 순서를 보장하지 않습니다만 ë””í´íŠ¸ I/O + 기능으로 ë§¤í•‘ëœ __iomem í¬ì¸í„°ì— 대해 ë™ìž‘í• ë•Œ ê°™ì€ ì£¼ë³€ìž¥ì¹˜ë¡œì˜ + 액세스ì—는 순서가 맞춰질 ê²ƒì´ ë³´ìž¥ë©ë‹ˆë‹¤. (*) readsX(), writesX(): - readsX() 와 writesX() MMIO 액세스 함수는 DMA 를 ìˆ˜í–‰í•˜ëŠ”ë° ì ì ˆì¹˜ ì•Šì€, - 주변장치 ë‚´ì˜ ë©”ëª¨ë¦¬ ë§¤í•‘ëœ ë ˆì§€ìŠ¤í„° 기반 FIFO ë¡œì˜ ì•¡ì„¸ìŠ¤ë¥¼ 위해 - 설계ë˜ì—ˆìŠµë‹ˆë‹¤. ë”°ë¼ì„œ, ì´ ê¸°ëŠ¥ë“¤ì€ ì•žì„œ ì„¤ëª…ëœ readX_relaxed() 와 - writeX_relaxed() ì˜ ìˆœì„œ ë³´ìž¥ë§Œì„ ì œê³µí•©ë‹ˆë‹¤. + readsX() 와 writesX() MMIO 액세스 함수는 DMA 를 ìˆ˜í–‰í•˜ëŠ”ë° ì ì ˆì¹˜ ì•Šì€, + 주변장치 ë‚´ì˜ ë©”ëª¨ë¦¬ ë§¤í•‘ëœ ë ˆì§€ìŠ¤í„° 기반 FIFO ë¡œì˜ ì•¡ì„¸ìŠ¤ë¥¼ 위해 + 설계ë˜ì—ˆìŠµë‹ˆë‹¤. ë”°ë¼ì„œ, ì´ ê¸°ëŠ¥ë“¤ì€ ì•žì„œ ì„¤ëª…ëœ readX_relaxed() 와 + writeX_relaxed() ì˜ ìˆœì„œ ë³´ìž¥ë§Œì„ ì œê³µí•©ë‹ˆë‹¤. (*) inX(), outX(): - inX() 와 outX() 액세스 함수는 ì¼ë¶€ 아키í…ì³ (특히 x86) ì—서는 특수한 - ëª…ë ¹ì–´ë¥¼ 필요로 하며 í¬íŠ¸ì— 매핑ë˜ëŠ”, ê³¼ê±°ì˜ ìœ ì‚°ì¸ I/O ì£¼ë³€ìž¥ì¹˜ë¡œì˜ - ì ‘ê·¼ì„ ìœ„í•´ 만들어졌습니다. + inX() 와 outX() 액세스 함수는 ì¼ë¶€ 아키í…ì³ (특히 x86) ì—서는 특수한 + ëª…ë ¹ì–´ë¥¼ 필요로 하며 í¬íŠ¸ì— 매핑ë˜ëŠ”, ê³¼ê±°ì˜ ìœ ì‚°ì¸ I/O ì£¼ë³€ìž¥ì¹˜ë¡œì˜ + ì ‘ê·¼ì„ ìœ„í•´ 만들어졌습니다. - ë§Žì€ CPU 아키í…ì³ê°€ ê²°êµì€ ì´ëŸ° 주변장치를 ë‚´ë¶€ì˜ ê°€ìƒ ë©”ëª¨ë¦¬ ë§¤í•‘ì„ í†µí•´ - ì ‘ê·¼í•˜ê¸° 때문ì—, inX() 와 outX() ê°€ ì œê³µí•˜ëŠ” ì´ì‹ì„± 있는 순서 ë³´ìž¥ì€ - ë””í´íŠ¸ I/O ê¸°ëŠ¥ì„ í†µí•œ ë§¤í•‘ì„ ì ‘ê·¼í• ë•Œì˜ readX() 와 writeX() ì— ì˜í•´ - ì œê³µë˜ëŠ” 것과 ê°ê° ë™ì¼í•©ë‹ˆë‹¤. + ë§Žì€ CPU 아키í…ì³ê°€ ê²°êµì€ ì´ëŸ° 주변장치를 ë‚´ë¶€ì˜ ê°€ìƒ ë©”ëª¨ë¦¬ ë§¤í•‘ì„ + 통해 ì ‘ê·¼í•˜ê¸° 때문ì—, inX() 와 outX() ê°€ ì œê³µí•˜ëŠ” ì´ì‹ì„± 있는 순서 + ë³´ìž¥ì€ ë””í´íŠ¸ I/O ê¸°ëŠ¥ì„ í†µí•œ ë§¤í•‘ì„ ì ‘ê·¼í• ë•Œì˜ readX() 와 writeX() ì— + ì˜í•´ ì œê³µë˜ëŠ” 것과 ê°ê° ë™ì¼í•©ë‹ˆë‹¤. - 디바ì´ìŠ¤ ë“œë¼ì´ë²„는 outX() ê°€ 리턴하기 ì „ì— í•´ë‹¹ I/O ì£¼ë³€ìž¥ì¹˜ë¡œë¶€í„°ì˜ ì™„ë£Œ - ì‘ë‹µì„ ê¸°ë‹¤ë¦¬ëŠ” 쓰기 트랜ìžì…˜ì„ 만들어 ë‚¸ë‹¤ê³ ê¸°ëŒ€í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ëŠ” - ëª¨ë“ ì•„í‚¤í…ì³ì—ì„œ 보장ë˜ì§€ëŠ” ì•Šê³ , ë”°ë¼ì„œ ì´ì‹ì„± 있는 순서 ê·œì¹™ì˜ ì¼ë¶€ë¶„ì´ - 아닙니다. + 디바ì´ìŠ¤ ë“œë¼ì´ë²„는 outX() ê°€ 리턴하기 ì „ì— í•´ë‹¹ I/O ì£¼ë³€ìž¥ì¹˜ë¡œë¶€í„°ì˜ + 완료 ì‘ë‹µì„ ê¸°ë‹¤ë¦¬ëŠ” 쓰기 트랜ìžì…˜ì„ 만들어 ë‚¸ë‹¤ê³ ê¸°ëŒ€í• ìˆ˜ë„ + 있습니다. ì´ëŠ” ëª¨ë“ ì•„í‚¤í…ì³ì—ì„œ 보장ë˜ì§€ëŠ” ì•Šê³ , ë”°ë¼ì„œ ì´ì‹ì„± 있는 + 순서 ê·œì¹™ì˜ ì¼ë¶€ë¶„ì´ ì•„ë‹™ë‹ˆë‹¤. (*) insX(), outsX(): - ì•žì—서와 ê°™ì´, insX() 와 outsX() 액세스 함수는 ë””í´íŠ¸ I/O ê¸°ëŠ¥ì„ í†µí•œ - ë§¤í•‘ì„ ì ‘ê·¼í• ë•Œ ê°ê° readX() 와 writeX() 와 ê°™ì€ ìˆœì„œ ë³´ìž¥ì„ ì œê³µí•©ë‹ˆë‹¤. + ì•žì—서와 ê°™ì´, insX() 와 outsX() 액세스 함수는 ë””í´íŠ¸ I/O ê¸°ëŠ¥ì„ í†µí•œ + ë§¤í•‘ì„ ì ‘ê·¼í• ë•Œ ê°ê° readX() 와 writeX() 와 ê°™ì€ ìˆœì„œ ë³´ìž¥ì„ + ì œê³µí•©ë‹ˆë‹¤. (*) ioreadX(), iowriteX() - ì´ê²ƒë“¤ì€ inX()/outX() 나 readX()/writeX() 처럼 ì‹¤ì œë¡œ 수행하는 ì•¡ì„¸ìŠ¤ì˜ - ì¢…ë¥˜ì— ë”°ë¼ ì ì ˆí•˜ê²Œ 수행ë 것입니다. + ì´ê²ƒë“¤ì€ inX()/outX() 나 readX()/writeX() 처럼 ì‹¤ì œë¡œ 수행하는 ì•¡ì„¸ìŠ¤ì˜ + ì¢…ë¥˜ì— ë”°ë¼ ì ì ˆí•˜ê²Œ 수행ë 것입니다. ì´ ëª¨ë“ ì•¡ì„¸ìŠ¤ í•¨ìˆ˜ë“¤ì€ ì•„ëž«ë‹¨ì˜ ì£¼ë³€ìž¥ì¹˜ê°€ little-endian ì´ë¼ ê°€ì •í•˜ë©°, ë”°ë¼ì„œ big-endian 아키í…ì³ì—서는 byte-swapping 오í¼ë ˆì´ì…˜ì„ 수행합니다.