1. 19 9月, 2018 7 次提交
  2. 21 7月, 2018 1 次提交
  3. 03 7月, 2018 2 次提交
    • R
      x86/intel_rdt: Make CPU information accessible for pseudo-locked regions · 33dc3e41
      Reinette Chatre 提交于
      When a resource group enters pseudo-locksetup mode it reflects that the
      platform supports cache pseudo-locking and the resource group is unused,
      ready to be used for a pseudo-locked region. Until it is set up as a
      pseudo-locked region the resource group is "locked down" such that no new
      tasks or cpus can be assigned to it. This is accomplished in a user visible
      way by making the cpus, cpus_list, and tasks resctrl files inaccassible
      (user cannot read from or write to these files).
      
      When the resource group changes to pseudo-locked mode it represents a cache
      pseudo-locked region. While not appropriate to make any changes to the cpus
      assigned to this region it is useful to make it easy for the user to see
      which cpus are associated with the pseudo-locked region.
      
      Modify the permissions of the cpus/cpus_list file when the resource group
      changes to pseudo-locked mode to support reading (not writing).  The
      information presented to the user when reading the file are the cpus
      associated with the pseudo-locked region.
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Cc: fenghua.yu@intel.com
      Cc: tony.luck@intel.com
      Cc: vikas.shivappa@linux.intel.com
      Cc: gavin.hindman@intel.com
      Cc: jithu.joseph@intel.com
      Cc: dave.hansen@intel.com
      Cc: hpa@zytor.com
      Link: https://lkml.kernel.org/r/12756b7963b6abc1bffe8fb560b87b75da827bd1.1530421961.git.reinette.chatre@intel.com
      33dc3e41
    • R
      x86/intel_rdt: Support restoration of subset of permissions · 392487de
      Reinette Chatre 提交于
      As the mode of a resource group changes, the operations it can support may
      also change. One way in which the supported operations are managed is to
      modify the permissions of the files within the resource group's resctrl
      directory.
      
      At the moment only two possible permissions are supported: the default
      permissions or no permissions in support for when the operation is "locked
      down". It is possible where an operation on a resource group may have more
      possibilities. For example, if by default changes can be made to the
      resource group by writing to a resctrl file while the current settings can
      be obtained by reading from the file, then it may be possible that in
      another mode it is only possible to read the current settings, and not
      change them.
      
      Make it possible to modify some of the permissions of a resctrl file in
      support of a more flexible way to manage the operations on a resource
      group. In this preparation work the original behavior is maintained where
      all permissions are restored.
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Cc: fenghua.yu@intel.com
      Cc: tony.luck@intel.com
      Cc: vikas.shivappa@linux.intel.com
      Cc: gavin.hindman@intel.com
      Cc: jithu.joseph@intel.com
      Cc: dave.hansen@intel.com
      Cc: hpa@zytor.com
      Link: https://lkml.kernel.org/r/8773aadfade7bcb2c48a45fa294a04d2c03bb0a1.1530421961.git.reinette.chatre@intel.com
      392487de
  4. 24 6月, 2018 1 次提交
  5. 23 6月, 2018 22 次提交
  6. 19 5月, 2018 2 次提交
  7. 23 2月, 2018 1 次提交
    • W
      x86/intel_rdt: Fix incorrect returned value when creating rdgroup... · 36e74d35
      Wang Hui 提交于
      x86/intel_rdt: Fix incorrect returned value when creating rdgroup sub-directory in resctrl file system
      
      If no monitoring feature is detected because all monitoring features are
      disabled during boot time or there is no monitoring feature in hardware,
      creating rdtgroup sub-directory by "mkdir" command reports error:
      
        mkdir: cannot create directory ‘/sys/fs/resctrl/p1’: No such file or directory
      
      But the sub-directory actually is generated and content is correct:
      
        cpus  cpus_list  schemata  tasks
      
      The error is because rdtgroup_mkdir_ctrl_mon() returns non zero value after
      the sub-directory is created and the returned value is reported as an error
      to user.
      
      Clear the returned value to report to user that the sub-directory is
      actually created successfully.
      Signed-off-by: NWang Hui <john.wanghui@huawei.com>
      Signed-off-by: NZhang Yanfei <yanfei.zhang@huawei.com>
      Signed-off-by: NFenghua Yu <fenghua.yu@intel.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi V Shankar <ravi.v.shankar@intel.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Vikas <vikas.shivappa@intel.com>
      Cc: Xiaochen Shen <xiaochen.shen@intel.com>
      Link: http://lkml.kernel.org/r/1519356363-133085-1-git-send-email-fenghua.yu@intel.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
      36e74d35
  8. 18 1月, 2018 1 次提交
  9. 21 10月, 2017 2 次提交
    • R
      x86/intel_rdt: Fix potential deadlock during resctrl mount · 87943db7
      Reinette Chatre 提交于
      Sai reported a warning during some MBA tests:
      
      [  236.755559] ======================================================
      [  236.762443] WARNING: possible circular locking dependency detected
      [  236.769328] 4.14.0-rc4-yocto-standard #8 Not tainted
      [  236.774857] ------------------------------------------------------
      [  236.781738] mount/10091 is trying to acquire lock:
      [  236.787071]  (cpu_hotplug_lock.rw_sem){++++}, at: [<ffffffff8117f892>] static_key_enable+0x12/0x30
      [  236.797058]
                     but task is already holding lock:
      [  236.803552]  (&type->s_umount_key#37/1){+.+.}, at: [<ffffffff81208b2f>] sget_userns+0x32f/0x520
      [  236.813247]
                     which lock already depends on the new lock.
      
      [  236.822353]
                     the existing dependency chain (in reverse order) is:
      [  236.830686]
                     -> #4 (&type->s_umount_key#37/1){+.+.}:
      [  236.837756]        __lock_acquire+0x1100/0x11a0
      [  236.842799]        lock_acquire+0xdf/0x1d0
      [  236.847363]        down_write_nested+0x46/0x80
      [  236.852310]        sget_userns+0x32f/0x520
      [  236.856873]        kernfs_mount_ns+0x7e/0x1f0
      [  236.861728]        rdt_mount+0x30c/0x440
      [  236.866096]        mount_fs+0x38/0x150
      [  236.870262]        vfs_kern_mount+0x67/0x150
      [  236.875015]        do_mount+0x1df/0xd50
      [  236.879286]        SyS_mount+0x95/0xe0
      [  236.883464]        entry_SYSCALL_64_fastpath+0x18/0xad
      [  236.889183]
                     -> #3 (rdtgroup_mutex){+.+.}:
      [  236.895292]        __lock_acquire+0x1100/0x11a0
      [  236.900337]        lock_acquire+0xdf/0x1d0
      [  236.904899]        __mutex_lock+0x80/0x8f0
      [  236.909459]        mutex_lock_nested+0x1b/0x20
      [  236.914407]        intel_rdt_online_cpu+0x3b/0x4a0
      [  236.919745]        cpuhp_invoke_callback+0xce/0xb80
      [  236.925177]        cpuhp_thread_fun+0x1c5/0x230
      [  236.930222]        smpboot_thread_fn+0x11a/0x1e0
      [  236.935362]        kthread+0x152/0x190
      [  236.939536]        ret_from_fork+0x27/0x40
      [  236.944097]
                     -> #2 (cpuhp_state-up){+.+.}:
      [  236.950199]        __lock_acquire+0x1100/0x11a0
      [  236.955241]        lock_acquire+0xdf/0x1d0
      [  236.959800]        cpuhp_issue_call+0x12e/0x1c0
      [  236.964845]        __cpuhp_setup_state_cpuslocked+0x13b/0x2f0
      [  236.971242]        __cpuhp_setup_state+0xa7/0x120
      [  236.976483]        page_writeback_init+0x43/0x67
      [  236.981623]        pagecache_init+0x38/0x3b
      [  236.986281]        start_kernel+0x3c6/0x41a
      [  236.990931]        x86_64_start_reservations+0x2a/0x2c
      [  236.996650]        x86_64_start_kernel+0x72/0x75
      [  237.001793]        verify_cpu+0x0/0xfb
      [  237.005966]
                     -> #1 (cpuhp_state_mutex){+.+.}:
      [  237.012364]        __lock_acquire+0x1100/0x11a0
      [  237.017408]        lock_acquire+0xdf/0x1d0
      [  237.021969]        __mutex_lock+0x80/0x8f0
      [  237.026527]        mutex_lock_nested+0x1b/0x20
      [  237.031475]        __cpuhp_setup_state_cpuslocked+0x54/0x2f0
      [  237.037777]        __cpuhp_setup_state+0xa7/0x120
      [  237.043013]        page_alloc_init+0x28/0x30
      [  237.047769]        start_kernel+0x148/0x41a
      [  237.052425]        x86_64_start_reservations+0x2a/0x2c
      [  237.058145]        x86_64_start_kernel+0x72/0x75
      [  237.063284]        verify_cpu+0x0/0xfb
      [  237.067456]
                     -> #0 (cpu_hotplug_lock.rw_sem){++++}:
      [  237.074436]        check_prev_add+0x401/0x800
      [  237.079286]        __lock_acquire+0x1100/0x11a0
      [  237.084330]        lock_acquire+0xdf/0x1d0
      [  237.088890]        cpus_read_lock+0x42/0x90
      [  237.093548]        static_key_enable+0x12/0x30
      [  237.098496]        rdt_mount+0x406/0x440
      [  237.102862]        mount_fs+0x38/0x150
      [  237.107035]        vfs_kern_mount+0x67/0x150
      [  237.111787]        do_mount+0x1df/0xd50
      [  237.116058]        SyS_mount+0x95/0xe0
      [  237.120233]        entry_SYSCALL_64_fastpath+0x18/0xad
      [  237.125952]
                     other info that might help us debug this:
      
      [  237.134867] Chain exists of:
                       cpu_hotplug_lock.rw_sem --> rdtgroup_mutex --> &type->s_umount_key#37/1
      
      [  237.148425]  Possible unsafe locking scenario:
      
      [  237.155015]        CPU0                    CPU1
      [  237.160057]        ----                    ----
      [  237.165100]   lock(&type->s_umount_key#37/1);
      [  237.169952]                                lock(rdtgroup_mutex);
      [  237.176641]
      lock(&type->s_umount_key#37/1);
      [  237.184287]   lock(cpu_hotplug_lock.rw_sem);
      [  237.189041]
                      *** DEADLOCK ***
      
      When the resctrl filesystem is mounted the locks must be acquired in the
      same order as was done when the cpus came online:
      
           cpu_hotplug_lock before rdtgroup_mutex.
      
      This also requires to switch the static_branch_enable() calls to the
      _cpulocked variant because now cpu hotplug lock is held already.
      
      [ tglx: Switched to cpus_read_[un]lock ]
      Reported-by: NSai Praneeth Prakhya <sai.praneeth.prakhya@intel.com>
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      Tested-by: NSai Praneeth Prakhya <sai.praneeth.prakhya@intel.com>
      Acked-by: NVikas Shivappa <vikas.shivappa@linux.intel.com>
      Cc: fenghua.yu@intel.com
      Cc: tony.luck@intel.com
      Link: https://lkml.kernel.org/r/9c41b91bc2f47d9e95b62b213ecdb45623c47a9f.1508490116.git.reinette.chatre@intel.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      87943db7
    • R
      x86/intel_rdt: Fix potential deadlock during resctrl unmount · 36b6f9fc
      Reinette Chatre 提交于
      Lockdep warns about a potential deadlock:
      
      [   66.782842] ======================================================
      [   66.782888] WARNING: possible circular locking dependency detected
      [   66.782937] 4.14.0-rc2-test-test+ #48 Not tainted
      [   66.782983] ------------------------------------------------------
      [   66.783052] umount/336 is trying to acquire lock:
      [   66.783117]  (cpu_hotplug_lock.rw_sem){++++}, at: [<ffffffff81032395>] rdt_kill_sb+0x215/0x390
      [   66.783193]
                     but task is already holding lock:
      [   66.783244]  (rdtgroup_mutex){+.+.}, at: [<ffffffff810321b6>] rdt_kill_sb+0x36/0x390
      [   66.783305]
                     which lock already depends on the new lock.
      
      [   66.783364]
                     the existing dependency chain (in reverse order) is:
      [   66.783419]
                     -> #3 (rdtgroup_mutex){+.+.}:
      [   66.783467]        __lock_acquire+0x1293/0x13f0
      [   66.783509]        lock_acquire+0xaf/0x220
      [   66.783543]        __mutex_lock+0x71/0x9b0
      [   66.783575]        mutex_lock_nested+0x1b/0x20
      [   66.783610]        intel_rdt_online_cpu+0x3b/0x430
      [   66.783649]        cpuhp_invoke_callback+0xab/0x8e0
      [   66.783687]        cpuhp_thread_fun+0x7a/0x150
      [   66.783722]        smpboot_thread_fn+0x1cc/0x270
      [   66.783764]        kthread+0x16e/0x190
      [   66.783794]        ret_from_fork+0x27/0x40
      [   66.783825]
                     -> #2 (cpuhp_state){+.+.}:
      [   66.783870]        __lock_acquire+0x1293/0x13f0
      [   66.783906]        lock_acquire+0xaf/0x220
      [   66.783938]        cpuhp_issue_call+0x102/0x170
      [   66.783974]        __cpuhp_setup_state_cpuslocked+0x154/0x2a0
      [   66.784023]        __cpuhp_setup_state+0xc7/0x170
      [   66.784061]        page_writeback_init+0x43/0x67
      [   66.784097]        pagecache_init+0x43/0x4a
      [   66.784131]        start_kernel+0x3ad/0x3f7
      [   66.784165]        x86_64_start_reservations+0x2a/0x2c
      [   66.784204]        x86_64_start_kernel+0x72/0x75
      [   66.784241]        verify_cpu+0x0/0xfb
      [   66.784270]
                     -> #1 (cpuhp_state_mutex){+.+.}:
      [   66.784319]        __lock_acquire+0x1293/0x13f0
      [   66.784355]        lock_acquire+0xaf/0x220
      [   66.784387]        __mutex_lock+0x71/0x9b0
      [   66.784419]        mutex_lock_nested+0x1b/0x20
      [   66.784454]        __cpuhp_setup_state_cpuslocked+0x52/0x2a0
      [   66.784497]        __cpuhp_setup_state+0xc7/0x170
      [   66.784535]        page_alloc_init+0x28/0x30
      [   66.784569]        start_kernel+0x148/0x3f7
      [   66.784602]        x86_64_start_reservations+0x2a/0x2c
      [   66.784642]        x86_64_start_kernel+0x72/0x75
      [   66.784678]        verify_cpu+0x0/0xfb
      [   66.784707]
                     -> #0 (cpu_hotplug_lock.rw_sem){++++}:
      [   66.784759]        check_prev_add+0x32f/0x6e0
      [   66.784794]        __lock_acquire+0x1293/0x13f0
      [   66.784830]        lock_acquire+0xaf/0x220
      [   66.784863]        cpus_read_lock+0x3d/0xb0
      [   66.784896]        rdt_kill_sb+0x215/0x390
      [   66.784930]        deactivate_locked_super+0x3e/0x70
      [   66.784968]        deactivate_super+0x40/0x60
      [   66.785003]        cleanup_mnt+0x3f/0x80
      [   66.785034]        __cleanup_mnt+0x12/0x20
      [   66.785070]        task_work_run+0x8b/0xc0
      [   66.785103]        exit_to_usermode_loop+0x94/0xa0
      [   66.786804]        syscall_return_slowpath+0xe8/0x150
      [   66.788502]        entry_SYSCALL_64_fastpath+0xab/0xad
      [   66.790194]
                     other info that might help us debug this:
      
      [   66.795139] Chain exists of:
                       cpu_hotplug_lock.rw_sem --> cpuhp_state --> rdtgroup_mutex
      
      [   66.800035]  Possible unsafe locking scenario:
      
      [   66.803267]        CPU0                    CPU1
      [   66.804867]        ----                    ----
      [   66.806443]   lock(rdtgroup_mutex);
      [   66.808002]                                lock(cpuhp_state);
      [   66.809565]                                lock(rdtgroup_mutex);
      [   66.811110]   lock(cpu_hotplug_lock.rw_sem);
      [   66.812608]
                      *** DEADLOCK ***
      
      [   66.816983] 2 locks held by umount/336:
      [   66.818418]  #0:  (&type->s_umount_key#35){+.+.}, at: [<ffffffff81229738>] deactivate_super+0x38/0x60
      [   66.819922]  #1:  (rdtgroup_mutex){+.+.}, at: [<ffffffff810321b6>] rdt_kill_sb+0x36/0x390
      
      When the resctrl filesystem is unmounted the locks should be obtain in the
      locks in the same order as was done when the cpus came online:
      
            cpu_hotplug_lock before rdtgroup_mutex.
      
      This also requires to switch the static_branch_disable() calls to the
      _cpulocked variant because now cpu hotplug lock is held already.
      
      [ tglx: Switched to cpus_read_[un]lock ]
      Signed-off-by: NReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Tested-by: NSai Praneeth Prakhya <sai.praneeth.prakhya@intel.com>
      Acked-by: NVikas Shivappa <vikas.shivappa@linux.intel.com>
      Acked-by: NFenghua Yu <fenghua.yu@intel.com>
      Acked-by: NTony Luck <tony.luck@intel.com>
      Link: https://lkml.kernel.org/r/cc292e76be073f7260604651711c47b09fd0dc81.1508490116.git.reinette.chatre@intel.com
      36b6f9fc
  10. 05 10月, 2017 1 次提交