Search code examples
linuxkernelacpisysfs

how ther linux kernel process the write to /sys/power/state


I want to find out the source file of the Linux kernel (x86, 2.6.18 or similar) that handle the write to /sys/power/state. I googled and try to search sysfs_create_file (and dir) in the source code. But I didn't find anything useful so far. Anyone knows that? Thanks!


Solution

  • To find out where a call into the kernel ends up, Ftrace can be a handy tool.

    For your particular case, I used the following command to get a function graph for a read from /sys/power/state (I figured the reading function wouldn't be too far away from writing function that you are looking for):

    trace-cmd record -p function_graph -F cat /sys/power/state
    

    (You need to be root to execute this)

    This dumps the trace to a binary file called trace.dat. To read this file, do the following (again as root):

    trace-cmd report
    

    Then I used grep to filter the output on things like "power" or "state" and eventually was able to find the following (only showing relevant parts):

    sysfs_read_file() {
      ...
      state_show() {
        valid_state() {
          acpi_suspend_state_valid();
        }
      }
      ...
    }
    

    So reading /sys/power/state ends up in state_show. Below that function, you can find state_store which is where I guess writes will end up.