]> Zhao Yanbai Git Server - kernel.git/commitdiff
修复sata irq handler计数问题 master
authoracevest <zhaoyanbai@126.com>
Mon, 16 Feb 2026 15:23:29 +0000 (23:23 +0800)
committeracevest <zhaoyanbai@126.com>
Mon, 16 Feb 2026 15:23:29 +0000 (23:23 +0800)
drivers/sata.c
include/tty.h
kernel/task_disk.c

index d6cc83f76276a36626e17ac3651b4c3c59927994..5295e5b29cfc36a87ce2f43c1216a30d85307c0f 100644 (file)
@@ -109,13 +109,13 @@ void init_sata_device(ahci_hba_t* hba, ahci_port_t* port, int port_index) {
 
 uint64_t sata_irq_cnt = 0;
 void sata_irq_handler(unsigned int irq, pt_regs_t* regs, void* dev_id) {
 
 uint64_t sata_irq_cnt = 0;
 void sata_irq_handler(unsigned int irq, pt_regs_t* regs, void* dev_id) {
+    sata_irq_cnt++;
+
     for (int i = 0; i < max_sata_devices; i++) {
         sata_device_t* sata = sata_devices + i;
         ahci_port_t* port = sata->port;
         assert(port != NULL);
 
     for (int i = 0; i < max_sata_devices; i++) {
         sata_device_t* sata = sata_devices + i;
         ahci_port_t* port = sata->port;
         assert(port != NULL);
 
-        sata_irq_cnt += 1;
-
         //
         uint32_t interrupt_status = port->interrupt_status;
         if (0 == interrupt_status) {
         //
         uint32_t interrupt_status = port->interrupt_status;
         if (0 == interrupt_status) {
index 54a0b966de0ad7795e6660e6f90acf94e3c670b2..153f4ada7b45c7277e8d9a565749323eb791b7db 100644 (file)
@@ -17,8 +17,8 @@
 #define TTY_GREEN 0b0010
 #define TTY_CYAN 0b0011
 #define TTY_RED 0b0100
 #define TTY_GREEN 0b0010
 #define TTY_CYAN 0b0011
 #define TTY_RED 0b0100
-#define TTY_PURPLE 0b101
-#define TTY_YELLOW 0b110
+#define TTY_PURPLE 0b0101
+#define TTY_YELLOW 0b0110
 #define TTY_WHITE 0b0111
 
 typedef struct tty {
 #define TTY_WHITE 0b0111
 
 typedef struct tty {
index 680c6a1973b0f596faba86d90940a43caf1b1371..f344f8c57ba781a1534d4c249914e138922db59e 100644 (file)
@@ -69,6 +69,10 @@ void disk_task_entry() {
     while (1) {
         down(&disk_request_queue.sem);
 
     while (1) {
         down(&disk_request_queue.sem);
 
+        for (int i = 0; i < 123; i++) {
+            asm("hlt");
+        }
+
         mutex_lock(&disk_request_queue.mutex);
         assert(!list_empty(&disk_request_queue.list));
         disk_request_t* req = list_first_entry(&disk_request_queue.list, disk_request_t, list);
         mutex_lock(&disk_request_queue.mutex);
         assert(!list_empty(&disk_request_queue.list));
         disk_request_t* req = list_first_entry(&disk_request_queue.list, disk_request_t, list);
@@ -84,8 +88,8 @@ void disk_task_entry() {
 
         disk_request_queue.completed_count++;  // 不需要保护
 
 
         disk_request_queue.completed_count++;  // 不需要保护
 
-        for (int i = 0; i < 123; i++) {
-            asm("hlt");
-        }
+        // for (int i = 0; i < 123; i++) {
+        //     asm("hlt");
+        // }
     }
 }
     }
 }