소스 검색

[MIPS] RP: Sysfs interface for stopping RP program

The old method of attempting to load a invalid program was just too icky.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Ralf Baechle 18 년 전
부모
커밋
0f5d0df35e
1개의 변경된 파일18개의 추가작업 그리고 0개의 파일을 삭제
  1. 18 0
      arch/mips/kernel/vpe.c

+ 18 - 0
arch/mips/kernel/vpe.c

@@ -1340,6 +1340,23 @@ static void kspd_sp_exit( int sp_id)
 }
 #endif
 
+static ssize_t store_kill(struct class_device *dev, const char *buf, size_t len)
+{
+	struct vpe *vpe = get_vpe(tclimit);
+	struct vpe_notifications *not;
+
+	list_for_each_entry(not, &vpe->notify, list) {
+		not->stop(tclimit);
+	}
+
+	release_progmem(vpe->load_addr);
+	cleanup_tc(get_tc(tclimit));
+	vpe_stop(vpe);
+	vpe_free(vpe);
+
+	return len;
+}
+
 static ssize_t show_ntcs(struct class_device *cd, char *buf)
 {
 	struct vpe *vpe = get_vpe(tclimit);
@@ -1369,6 +1386,7 @@ out_einval:
 }
 
 static struct class_device_attribute vpe_class_attributes[] = {
+	__ATTR(kill, S_IWUSR, NULL, store_kill),
 	__ATTR(ntcs, S_IRUGO | S_IWUSR, show_ntcs, store_ntcs),
 	{}
 };